diff --git a/cartographer/cloud/internal/handlers/add_local_slam_result_data_handler.cc b/cartographer/cloud/internal/handlers/add_local_slam_result_data_handler.cc index 8dcf852..8436149 100644 --- a/cartographer/cloud/internal/handlers/add_local_slam_result_data_handler.cc +++ b/cartographer/cloud/internal/handlers/add_local_slam_result_data_handler.cc @@ -31,14 +31,9 @@ namespace handlers { void AddLocalSlamResultDataHandler::OnRequest( const proto::AddLocalSlamResultDataRequest& request) { - auto local_slam_result_data = - GetContext()->ProcessLocalSlamResultData( - request.sensor_metadata().sensor_id(), - common::FromUniversal(request.local_slam_result_data().timestamp()), - request.local_slam_result_data()); GetContext()->EnqueueLocalSlamResultData( request.sensor_metadata().trajectory_id(), - request.sensor_metadata().sensor_id(), std::move(local_slam_result_data)); + request.sensor_metadata().sensor_id(), request.local_slam_result_data()); } void AddLocalSlamResultDataHandler::OnReadsDone() { diff --git a/cartographer/cloud/internal/map_builder_context_impl.cc b/cartographer/cloud/internal/map_builder_context_impl.cc index ef6eaab..54fc4cb 100644 --- a/cartographer/cloud/internal/map_builder_context_impl.cc +++ b/cartographer/cloud/internal/map_builder_context_impl.cc @@ -24,39 +24,23 @@ namespace cartographer { namespace cloud { template <> -std::unique_ptr -MapBuilderContext::ProcessLocalSlamResultData( - const std::string& sensor_id, common::Time time, - const mapping::proto::LocalSlamResultData& proto) { - CHECK_GE(proto.submaps().size(), 1); - CHECK(proto.submaps(0).has_submap_2d()); - std::vector> submaps; - for (const auto& submap_proto : proto.submaps()) { - submaps.push_back(submap_controller_.UpdateSubmap(submap_proto)); - } - return common::make_unique( - sensor_id, time, - std::make_shared( - mapping::FromProto(proto.node_data())), - submaps); +void MapBuilderContext::EnqueueLocalSlamResultData( + int trajectory_id, const std::string& sensor_id, + const mapping::proto::LocalSlamResultData& local_slam_result_data) { + map_builder_server_->incoming_data_queue_.Push(common::make_unique( + Data{trajectory_id, + common::make_unique( + sensor_id, local_slam_result_data, &submap_controller_)})); } template <> -std::unique_ptr -MapBuilderContext::ProcessLocalSlamResultData( - const std::string& sensor_id, common::Time time, - const mapping::proto::LocalSlamResultData& proto) { - CHECK_GE(proto.submaps().size(), 1); - CHECK(proto.submaps(0).has_submap_3d()); - std::vector> submaps; - for (const auto& submap_proto : proto.submaps()) { - submaps.push_back(submap_controller_.UpdateSubmap(submap_proto)); - } - return common::make_unique( - sensor_id, time, - std::make_shared( - mapping::FromProto(proto.node_data())), - submaps); +void MapBuilderContext::EnqueueLocalSlamResultData( + int trajectory_id, const std::string& sensor_id, + const mapping::proto::LocalSlamResultData& local_slam_result_data) { + map_builder_server_->incoming_data_queue_.Push(common::make_unique( + Data{trajectory_id, + common::make_unique( + sensor_id, local_slam_result_data, &submap_controller_)})); } } // namespace cloud diff --git a/cartographer/cloud/internal/map_builder_context_impl.h b/cartographer/cloud/internal/map_builder_context_impl.h index 0913a0f..7c77a52 100644 --- a/cartographer/cloud/internal/map_builder_context_impl.h +++ b/cartographer/cloud/internal/map_builder_context_impl.h @@ -92,24 +92,14 @@ void MapBuilderContext::EnqueueSensorData( common::make_unique(Data{trajectory_id, std::move(data)})); } -template -void MapBuilderContext::EnqueueLocalSlamResultData( +template <> +void MapBuilderContext::EnqueueLocalSlamResultData( int trajectory_id, const std::string& sensor_id, - std::unique_ptr local_slam_result_data) { - map_builder_server_->incoming_data_queue_.Push(common::make_unique( - Data{trajectory_id, std::move(local_slam_result_data)})); -} - + const mapping::proto::LocalSlamResultData& local_slam_result_data); template <> -std::unique_ptr -MapBuilderContext::ProcessLocalSlamResultData( - const std::string& sensor_id, common::Time time, - const mapping::proto::LocalSlamResultData& proto); -template <> -std::unique_ptr -MapBuilderContext::ProcessLocalSlamResultData( - const std::string& sensor_id, common::Time time, - const mapping::proto::LocalSlamResultData& proto); +void MapBuilderContext::EnqueueLocalSlamResultData( + int trajectory_id, const std::string& sensor_id, + const mapping::proto::LocalSlamResultData& local_slam_result_data); } // namespace cloud } // namespace cartographer diff --git a/cartographer/cloud/internal/map_builder_context_interface.h b/cartographer/cloud/internal/map_builder_context_interface.h index ed0597b..388ec74 100644 --- a/cartographer/cloud/internal/map_builder_context_interface.h +++ b/cartographer/cloud/internal/map_builder_context_interface.h @@ -21,6 +21,7 @@ #include "cartographer/cloud/internal/local_trajectory_uploader.h" #include "cartographer/common/blocking_queue.h" #include "cartographer/mapping/map_builder_interface.h" +#include "cartographer/mapping/proto/serialization.pb.h" #include "cartographer/sensor/data.h" #include "cartographer/sensor/range_data.h" #include "cartographer/transform/rigid_transform.h" @@ -68,16 +69,12 @@ class MapBuilderContextInterface : public async_grpc::ExecutionContext { virtual void UnsubscribeLocalSlamResults( const SubscriptionId& subscription_id) = 0; virtual void NotifyFinishTrajectory(int trajectory_id) = 0; - virtual std::unique_ptr - ProcessLocalSlamResultData( - const std::string& sensor_id, common::Time time, - const mapping::proto::LocalSlamResultData& proto) = 0; virtual LocalTrajectoryUploaderInterface* local_trajectory_uploader() = 0; virtual void EnqueueSensorData(int trajectory_id, std::unique_ptr data) = 0; virtual void EnqueueLocalSlamResultData( int trajectory_id, const std::string& sensor_id, - std::unique_ptr local_slam_result_data) = 0; + const mapping::proto::LocalSlamResultData& local_slam_result_data) = 0; }; } // namespace cloud diff --git a/cartographer/cloud/internal/map_builder_server.h b/cartographer/cloud/internal/map_builder_server.h index 029f3f1..8e0cef1 100644 --- a/cartographer/cloud/internal/map_builder_server.h +++ b/cartographer/cloud/internal/map_builder_server.h @@ -21,13 +21,13 @@ #include "async_grpc/server.h" #include "cartographer/cloud/internal/local_trajectory_uploader.h" #include "cartographer/cloud/internal/map_builder_context_interface.h" -#include "cartographer/cloud/internal/submap_controller.h" #include "cartographer/cloud/map_builder_server_interface.h" #include "cartographer/cloud/proto/map_builder_server_options.pb.h" #include "cartographer/common/blocking_queue.h" #include "cartographer/common/time.h" #include "cartographer/mapping/2d/submap_2d.h" #include "cartographer/mapping/3d/submap_3d.h" +#include "cartographer/mapping/internal/submap_controller.h" #include "cartographer/mapping/local_slam_result_data.h" #include "cartographer/mapping/map_builder.h" #include "cartographer/mapping/trajectory_builder_interface.h" @@ -53,21 +53,17 @@ class MapBuilderContext : public MapBuilderContextInterface { void UnsubscribeLocalSlamResults( const SubscriptionId& subscription_id) override; void NotifyFinishTrajectory(int trajectory_id) override; - std::unique_ptr ProcessLocalSlamResultData( - const std::string& sensor_id, common::Time time, - const mapping::proto::LocalSlamResultData& proto) override; LocalTrajectoryUploaderInterface* local_trajectory_uploader() override; - void EnqueueSensorData(int trajectory_id, std::unique_ptr data) override; void EnqueueLocalSlamResultData(int trajectory_id, const std::string& sensor_id, - std::unique_ptr + const mapping::proto::LocalSlamResultData& local_slam_result_data) override; private: MapBuilderServer* map_builder_server_; - SubmapController submap_controller_; + mapping::SubmapController submap_controller_; }; class MapBuilderServer : public MapBuilderServerInterface { diff --git a/cartographer/cloud/internal/testing/mock_map_builder_context.h b/cartographer/cloud/internal/testing/mock_map_builder_context.h index b01682e..ff8b0f3 100644 --- a/cartographer/cloud/internal/testing/mock_map_builder_context.h +++ b/cartographer/cloud/internal/testing/mock_map_builder_context.h @@ -45,16 +45,6 @@ class MockMapBuilderContext : public MapBuilderContextInterface { MOCK_METHOD1(UnsubscribeLocalSlamResults, void(const MapBuilderContextInterface::SubscriptionId &)); MOCK_METHOD1(NotifyFinishTrajectory, void(int)); - MOCK_METHOD3(DoProcessLocalSlamResultData, - mapping::LocalSlamResultData *( - const std::string &, common::Time, - const mapping::proto::LocalSlamResultData &)); - std::unique_ptr ProcessLocalSlamResultData( - const std::string &sensor_id, common::Time time, - const mapping::proto::LocalSlamResultData &proto) override { - return std::unique_ptr( - DoProcessLocalSlamResultData(sensor_id, time, proto)); - } MOCK_METHOD0(local_trajectory_uploader, LocalTrajectoryUploaderInterface *()); MOCK_METHOD2(DoEnqueueSensorData, void(int, sensor::Data *)); @@ -62,15 +52,9 @@ class MockMapBuilderContext : public MapBuilderContextInterface { std::unique_ptr data) override { DoEnqueueSensorData(trajectory_id, data.get()); } - MOCK_METHOD3(DoEnqueueLocalSlamResultData, - void(int, const std::string &, mapping::LocalSlamResultData *)); - void EnqueueLocalSlamResultData(int trajectory_id, - const std::string &sensor_id, - std::unique_ptr - local_slam_result_data) override { - DoEnqueueLocalSlamResultData(trajectory_id, sensor_id, - local_slam_result_data.get()); - } + MOCK_METHOD3(EnqueueLocalSlamResultData, + void(int, const std::string &, + const mapping::proto::LocalSlamResultData &)); }; } // namespace testing diff --git a/cartographer/mapping/internal/2d/local_slam_result_2d.cc b/cartographer/mapping/internal/2d/local_slam_result_2d.cc index 5de112f..bd7c93e 100644 --- a/cartographer/mapping/internal/2d/local_slam_result_2d.cc +++ b/cartographer/mapping/internal/2d/local_slam_result_2d.cc @@ -29,8 +29,16 @@ void LocalSlamResult2D::AddToTrajectoryBuilder( void LocalSlamResult2D::AddToPoseGraph(int trajectory_id, PoseGraph* pose_graph) const { DCHECK(dynamic_cast(pose_graph)); + CHECK_GE(local_slam_result_data_.submaps().size(), 1); + CHECK(local_slam_result_data_.submaps(0).has_submap_2d()); + std::vector> submaps; + for (const auto& submap_proto : local_slam_result_data_.submaps()) { + submaps.push_back(submap_controller_->UpdateSubmap(submap_proto)); + } static_cast(pose_graph) - ->AddNode(node_data_, trajectory_id, insertion_submaps_); + ->AddNode(std::make_shared( + mapping::FromProto(local_slam_result_data_.node_data())), + trajectory_id, submaps); } } // namespace mapping diff --git a/cartographer/mapping/internal/2d/local_slam_result_2d.h b/cartographer/mapping/internal/2d/local_slam_result_2d.h index ae0fd38..f55fdd2 100644 --- a/cartographer/mapping/internal/2d/local_slam_result_2d.h +++ b/cartographer/mapping/internal/2d/local_slam_result_2d.h @@ -17,7 +17,7 @@ #ifndef CARTOGRAPHER_MAPPING_INTERNAL_2D_LOCAL_SLAM_RESULT_2D_H_ #define CARTOGRAPHER_MAPPING_INTERNAL_2D_LOCAL_SLAM_RESULT_2D_H_ -#include "cartographer/mapping/2d/submap_2d.h" +#include "cartographer/mapping/internal/submap_controller.h" #include "cartographer/mapping/local_slam_result_data.h" #include "cartographer/mapping/trajectory_builder_interface.h" @@ -27,20 +27,23 @@ namespace mapping { class LocalSlamResult2D : public LocalSlamResultData { public: LocalSlamResult2D( - const std::string& sensor_id, common::Time time, - std::shared_ptr node_data, - const std::vector>& insertion_submaps) - : LocalSlamResultData(sensor_id, time), - node_data_(node_data), - insertion_submaps_(insertion_submaps) {} + const std::string& sensor_id, + const mapping::proto::LocalSlamResultData local_slam_result_data, + SubmapController* submap_controller) + : LocalSlamResultData(sensor_id, common::FromUniversal( + local_slam_result_data.timestamp())), + sensor_id_(sensor_id), + local_slam_result_data_(local_slam_result_data), + submap_controller_(submap_controller) {} void AddToTrajectoryBuilder( TrajectoryBuilderInterface* const trajectory_builder) override; void AddToPoseGraph(int trajectory_id, PoseGraph* pose_graph) const override; private: - std::shared_ptr node_data_; - std::vector> insertion_submaps_; + const std::string sensor_id_; + const mapping::proto::LocalSlamResultData local_slam_result_data_; + SubmapController* submap_controller_; }; } // namespace mapping diff --git a/cartographer/mapping/internal/3d/local_slam_result_3d.cc b/cartographer/mapping/internal/3d/local_slam_result_3d.cc index ef6eece..0f9d70b 100644 --- a/cartographer/mapping/internal/3d/local_slam_result_3d.cc +++ b/cartographer/mapping/internal/3d/local_slam_result_3d.cc @@ -29,8 +29,16 @@ void LocalSlamResult3D::AddToTrajectoryBuilder( void LocalSlamResult3D::AddToPoseGraph(int trajectory_id, PoseGraph* pose_graph) const { DCHECK(dynamic_cast(pose_graph)); + CHECK_GE(local_slam_result_data_.submaps().size(), 1); + CHECK(local_slam_result_data_.submaps(0).has_submap_3d()); + std::vector> submaps; + for (const auto& submap_proto : local_slam_result_data_.submaps()) { + submaps.push_back(submap_controller_->UpdateSubmap(submap_proto)); + } static_cast(pose_graph) - ->AddNode(node_data_, trajectory_id, insertion_submaps_); + ->AddNode(std::make_shared( + mapping::FromProto(local_slam_result_data_.node_data())), + trajectory_id, submaps); } } // namespace mapping diff --git a/cartographer/mapping/internal/3d/local_slam_result_3d.h b/cartographer/mapping/internal/3d/local_slam_result_3d.h index 24a55b7..3efba2e 100644 --- a/cartographer/mapping/internal/3d/local_slam_result_3d.h +++ b/cartographer/mapping/internal/3d/local_slam_result_3d.h @@ -17,7 +17,7 @@ #ifndef CARTOGRAPHER_MAPPING_INTERNAL_3D_LOCAL_SLAM_RESULT_3D_H_ #define CARTOGRAPHER_MAPPING_INTERNAL_3D_LOCAL_SLAM_RESULT_3D_H_ -#include "cartographer/mapping/3d/submap_3d.h" +#include "cartographer/mapping/internal/submap_controller.h" #include "cartographer/mapping/local_slam_result_data.h" #include "cartographer/mapping/trajectory_builder_interface.h" @@ -27,20 +27,23 @@ namespace mapping { class LocalSlamResult3D : public LocalSlamResultData { public: LocalSlamResult3D( - const std::string& sensor_id, common::Time time, - std::shared_ptr node_data, - const std::vector>& insertion_submaps) - : LocalSlamResultData(sensor_id, time), - node_data_(node_data), - insertion_submaps_(insertion_submaps) {} + const std::string& sensor_id, + const mapping::proto::LocalSlamResultData local_slam_result_data, + SubmapController* submap_controller) + : LocalSlamResultData(sensor_id, common::FromUniversal( + local_slam_result_data.timestamp())), + sensor_id_(sensor_id), + local_slam_result_data_(local_slam_result_data), + submap_controller_(submap_controller) {} void AddToTrajectoryBuilder( TrajectoryBuilderInterface* const trajectory_builder) override; void AddToPoseGraph(int trajectory_id, PoseGraph* pose_graph) const override; private: - std::shared_ptr node_data_; - std::vector> insertion_submaps_; + const std::string sensor_id_; + const mapping::proto::LocalSlamResultData local_slam_result_data_; + SubmapController* submap_controller_; }; } // namespace mapping diff --git a/cartographer/cloud/internal/submap_controller.cc b/cartographer/mapping/internal/submap_controller.cc similarity index 88% rename from cartographer/cloud/internal/submap_controller.cc rename to cartographer/mapping/internal/submap_controller.cc index ea263c0..16a60f9 100644 --- a/cartographer/cloud/internal/submap_controller.cc +++ b/cartographer/mapping/internal/submap_controller.cc @@ -14,10 +14,10 @@ * limitations under the License. */ -#include "cartographer/cloud/internal/submap_controller.h" +#include "cartographer/mapping/internal/submap_controller.h" namespace cartographer { -namespace cloud { +namespace mapping { template <> std::shared_ptr @@ -33,5 +33,5 @@ SubmapController::CreateSubmap( return std::make_shared(proto.submap_3d()); } -} // namespace cloud +} // namespace mapping } // namespace cartographer \ No newline at end of file diff --git a/cartographer/cloud/internal/submap_controller.h b/cartographer/mapping/internal/submap_controller.h similarity index 91% rename from cartographer/cloud/internal/submap_controller.h rename to cartographer/mapping/internal/submap_controller.h index 056e335..74e26ac 100644 --- a/cartographer/cloud/internal/submap_controller.h +++ b/cartographer/mapping/internal/submap_controller.h @@ -14,8 +14,8 @@ * limitations under the License. */ -#ifndef CARTOGRAPHER_CLOUD_INTERNAL_SUBMAP_CONTROLLER_H -#define CARTOGRAPHER_CLOUD_INTERNAL_SUBMAP_CONTROLLER_H +#ifndef CARTOGRAPHER_MAPPING_INTERNAL_SUBMAP_CONTROLLER_H +#define CARTOGRAPHER_MAPPING_INTERNAL_SUBMAP_CONTROLLER_H #include "cartographer/mapping/2d/submap_2d.h" #include "cartographer/mapping/3d/submap_3d.h" @@ -23,7 +23,7 @@ #include "cartographer/mapping/proto/serialization.pb.h" namespace cartographer { -namespace cloud { +namespace mapping { template class SubmapController { @@ -71,7 +71,7 @@ std::shared_ptr SubmapController::CreateSubmap( const mapping::proto::Submap& proto); -} // namespace cloud +} // namespace mapping } // namespace cartographer -#endif // CARTOGRAPHER_CLOUD_INTERNAL_SUBMAP_CONTROLLER_H +#endif // CARTOGRAPHER_MAPPING_INTERNAL_SUBMAP_CONTROLLER_H