Add WriteStateToFileResponse. (#1428)
Changes the public map builder API, but is required to not break the ROS API. See also https://github.com/googlecartographer/cartographer_ros/pull/1014 and #1422master
							parent
							
								
									d53ac8102b
								
							
						
					
					
						commit
						ba859a6ed5
					
				|  | @ -153,7 +153,7 @@ void MapBuilderStub::SerializeState(bool include_unfinished_submaps, | |||
|   } | ||||
| } | ||||
| 
 | ||||
| void MapBuilderStub::SerializeStateToFile(bool include_unfinished_submaps, | ||||
| bool MapBuilderStub::SerializeStateToFile(bool include_unfinished_submaps, | ||||
|                                           const std::string& filename) { | ||||
|   if (include_unfinished_submaps) { | ||||
|     LOG(WARNING) << "Serializing unfinished submaps is currently unsupported. " | ||||
|  | @ -164,9 +164,12 @@ void MapBuilderStub::SerializeStateToFile(bool include_unfinished_submaps, | |||
|   ::grpc::Status status; | ||||
|   async_grpc::Client<handlers::WriteStateToFileSignature> client( | ||||
|       client_channel_); | ||||
|   CHECK(client.Write(request, &status)) | ||||
|       << "code: " << status.error_code() | ||||
|       << " reason: " << status.error_message(); | ||||
|   if (!client.Write(request, &status)) { | ||||
|     LOG(ERROR) << "WriteStateToFileRequest failed - " | ||||
|                << "code: " << status.error_code() | ||||
|                << " reason: " << status.error_message(); | ||||
|   } | ||||
|   return client.response().success(); | ||||
| } | ||||
| 
 | ||||
| std::map<int, int> MapBuilderStub::LoadState( | ||||
|  |  | |||
|  | @ -50,7 +50,7 @@ class MapBuilderStub : public mapping::MapBuilderInterface { | |||
|       mapping::proto::SubmapQuery::Response* response) override; | ||||
|   void SerializeState(bool include_unfinished_submaps, | ||||
|                       io::ProtoStreamWriterInterface* writer) override; | ||||
|   void SerializeStateToFile(bool include_unfinished_submaps, | ||||
|   bool SerializeStateToFile(bool include_unfinished_submaps, | ||||
|                             const std::string& filename) override; | ||||
|   std::map<int, int> LoadState(io::ProtoStreamReaderInterface* reader, | ||||
|                                bool load_frozen_state) override; | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ | |||
| 
 | ||||
| #include "cartographer/cloud/internal/handlers/write_state_to_file_handler.h" | ||||
| 
 | ||||
| #include "absl/memory/memory.h" | ||||
| #include "async_grpc/rpc_handler.h" | ||||
| #include "cartographer/cloud/internal/map_builder_context_interface.h" | ||||
| #include "cartographer/cloud/internal/map_builder_server.h" | ||||
|  | @ -32,8 +33,14 @@ void WriteStateToFileHandler::OnRequest( | |||
|     Finish(::grpc::Status(::grpc::INVALID_ARGUMENT, "Filename empty.")); | ||||
|     return; | ||||
|   } | ||||
|   GetContext<MapBuilderContextInterface>()->map_builder().SerializeStateToFile( | ||||
|       /*include_unfinished_submaps=*/false, request.filename()); | ||||
|   bool success = | ||||
|       GetContext<MapBuilderContextInterface>() | ||||
|           ->map_builder() | ||||
|           .SerializeStateToFile( | ||||
|               /*include_unfinished_submaps=*/false, request.filename()); | ||||
|   auto response = absl::make_unique<proto::WriteStateToFileResponse>(); | ||||
|   response->set_success(success); | ||||
|   Send(std::move(response)); | ||||
| } | ||||
| 
 | ||||
| }  // namespace handlers
 | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ namespace handlers { | |||
| 
 | ||||
| DEFINE_HANDLER_SIGNATURE( | ||||
|     WriteStateToFileSignature, proto::WriteStateToFileRequest, | ||||
|     google::protobuf::Empty, | ||||
|     proto::WriteStateToFileResponse, | ||||
|     "/cartographer.cloud.proto.MapBuilderService/WriteStateToFile") | ||||
| 
 | ||||
| class WriteStateToFileHandler | ||||
|  |  | |||
|  | @ -232,6 +232,10 @@ message WriteStateToFileRequest { | |||
|   string filename = 1; | ||||
| } | ||||
| 
 | ||||
| message WriteStateToFileResponse { | ||||
|   bool success = 1; | ||||
| } | ||||
| 
 | ||||
| message IsTrajectoryFinishedRequest { | ||||
|   int32 trajectory_id = 1; | ||||
| } | ||||
|  | @ -345,5 +349,6 @@ service MapBuilderService { | |||
|   rpc WriteState(google.protobuf.Empty) returns (stream WriteStateResponse); | ||||
| 
 | ||||
|   // Writes the serialized SLAM state to the host file system. | ||||
|   rpc WriteStateToFile(WriteStateToFileRequest) returns (google.protobuf.Empty); | ||||
|   rpc WriteStateToFile(WriteStateToFileRequest) | ||||
|       returns (WriteStateToFileResponse); | ||||
| } | ||||
|  |  | |||
|  | @ -48,7 +48,7 @@ class MockMapBuilder : public mapping::MapBuilderInterface { | |||
|                std::string(const mapping::SubmapId &, | ||||
|                            mapping::proto::SubmapQuery::Response *)); | ||||
|   MOCK_METHOD2(SerializeState, void(bool, io::ProtoStreamWriterInterface *)); | ||||
|   MOCK_METHOD2(SerializeStateToFile, void(bool, const std::string &)); | ||||
|   MOCK_METHOD2(SerializeStateToFile, bool(bool, const std::string &)); | ||||
|   MOCK_METHOD2(LoadState, | ||||
|                std::map<int, int>(io::ProtoStreamReaderInterface *, bool)); | ||||
|   MOCK_METHOD2(LoadStateFromFile, | ||||
|  |  | |||
|  | @ -212,12 +212,12 @@ void MapBuilder::SerializeState(bool include_unfinished_submaps, | |||
|                     include_unfinished_submaps); | ||||
| } | ||||
| 
 | ||||
| void MapBuilder::SerializeStateToFile(bool include_unfinished_submaps, | ||||
| bool MapBuilder::SerializeStateToFile(bool include_unfinished_submaps, | ||||
|                                       const std::string& filename) { | ||||
|   io::ProtoStreamWriter writer(filename); | ||||
|   io::WritePbStream(*pose_graph_, all_trajectory_builder_options_, &writer, | ||||
|                     include_unfinished_submaps); | ||||
|   writer.Close(); | ||||
|   return (writer.Close()); | ||||
| } | ||||
| 
 | ||||
| std::map<int, int> MapBuilder::LoadState( | ||||
|  |  | |||
|  | @ -59,7 +59,7 @@ class MapBuilder : public MapBuilderInterface { | |||
|   void SerializeState(bool include_unfinished_submaps, | ||||
|                       io::ProtoStreamWriterInterface *writer) override; | ||||
| 
 | ||||
|   void SerializeStateToFile(bool include_unfinished_submaps, | ||||
|   bool SerializeStateToFile(bool include_unfinished_submaps, | ||||
|                             const std::string &filename) override; | ||||
| 
 | ||||
|   std::map<int, int> LoadState(io::ProtoStreamReaderInterface *reader, | ||||
|  |  | |||
|  | @ -88,7 +88,8 @@ class MapBuilderInterface { | |||
|   // 'include_unfinished_submaps' is set to true, unfinished submaps, i.e.
 | ||||
|   // submaps that have not yet received all rangefinder data insertions, will
 | ||||
|   // be included in the serialized state.
 | ||||
|   virtual void SerializeStateToFile(bool include_unfinished_submaps, | ||||
|   // Returns true if the file was successfully written.
 | ||||
|   virtual bool SerializeStateToFile(bool include_unfinished_submaps, | ||||
|                                     const std::string& filename) = 0; | ||||
| 
 | ||||
|   // Loads the SLAM state from a proto stream. Returns the remapping of new
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue