parent
							
								
									c1e1d03636
								
							
						
					
					
						commit
						12c3795134
					
				|  | @ -46,8 +46,13 @@ CollatedTrajectoryBuilder::CollatedTrajectoryBuilder( | ||||||
| 
 | 
 | ||||||
| CollatedTrajectoryBuilder::~CollatedTrajectoryBuilder() {} | CollatedTrajectoryBuilder::~CollatedTrajectoryBuilder() {} | ||||||
| 
 | 
 | ||||||
| Submaps* CollatedTrajectoryBuilder::submaps() { | int CollatedTrajectoryBuilder::num_submaps() { | ||||||
|   return wrapped_trajectory_builder_->submaps(); |   return wrapped_trajectory_builder_->num_submaps(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | TrajectoryBuilder::SubmapData CollatedTrajectoryBuilder::GetSubmapData( | ||||||
|  |     const int submap_index) { | ||||||
|  |   return wrapped_trajectory_builder_->GetSubmapData(submap_index); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const TrajectoryBuilder::PoseEstimate& | const TrajectoryBuilder::PoseEstimate& | ||||||
|  |  | ||||||
|  | @ -49,7 +49,8 @@ class CollatedTrajectoryBuilder : public TrajectoryBuilder { | ||||||
|   CollatedTrajectoryBuilder& operator=(const CollatedTrajectoryBuilder&) = |   CollatedTrajectoryBuilder& operator=(const CollatedTrajectoryBuilder&) = | ||||||
|       delete; |       delete; | ||||||
| 
 | 
 | ||||||
|   Submaps* submaps() override; |   int num_submaps() override; | ||||||
|  |   SubmapData GetSubmapData(int submap_index) override; | ||||||
|   const PoseEstimate& pose_estimate() const override; |   const PoseEstimate& pose_estimate() const override; | ||||||
| 
 | 
 | ||||||
|   void AddSensorData(const string& sensor_id, |   void AddSensorData(const string& sensor_id, | ||||||
|  |  | ||||||
|  | @ -20,12 +20,14 @@ | ||||||
| #include <functional> | #include <functional> | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <string> | #include <string> | ||||||
|  | #include <vector> | ||||||
| 
 | 
 | ||||||
| #include "cartographer/common/time.h" | #include "cartographer/common/time.h" | ||||||
| #include "cartographer/mapping/submaps.h" | #include "cartographer/mapping/submaps.h" | ||||||
| #include "cartographer/mapping/trajectory_builder.h" | #include "cartographer/mapping/trajectory_builder.h" | ||||||
| #include "cartographer/sensor/point_cloud.h" | #include "cartographer/sensor/point_cloud.h" | ||||||
| #include "cartographer/sensor/range_data.h" | #include "cartographer/sensor/range_data.h" | ||||||
|  | #include "cartographer/transform/rigid_transform.h" | ||||||
| 
 | 
 | ||||||
| namespace cartographer { | namespace cartographer { | ||||||
| namespace mapping { | namespace mapping { | ||||||
|  | @ -37,6 +39,7 @@ namespace mapping { | ||||||
| class GlobalTrajectoryBuilderInterface { | class GlobalTrajectoryBuilderInterface { | ||||||
|  public: |  public: | ||||||
|   using PoseEstimate = TrajectoryBuilder::PoseEstimate; |   using PoseEstimate = TrajectoryBuilder::PoseEstimate; | ||||||
|  |   using SubmapData = TrajectoryBuilder::SubmapData; | ||||||
| 
 | 
 | ||||||
|   GlobalTrajectoryBuilderInterface() {} |   GlobalTrajectoryBuilderInterface() {} | ||||||
|   virtual ~GlobalTrajectoryBuilderInterface() {} |   virtual ~GlobalTrajectoryBuilderInterface() {} | ||||||
|  | @ -46,7 +49,8 @@ class GlobalTrajectoryBuilderInterface { | ||||||
|   GlobalTrajectoryBuilderInterface& operator=( |   GlobalTrajectoryBuilderInterface& operator=( | ||||||
|       const GlobalTrajectoryBuilderInterface&) = delete; |       const GlobalTrajectoryBuilderInterface&) = delete; | ||||||
| 
 | 
 | ||||||
|   virtual Submaps* submaps() = 0; |   virtual int num_submaps() = 0; | ||||||
|  |   virtual SubmapData GetSubmapData(int submap_index) = 0; | ||||||
|   virtual const PoseEstimate& pose_estimate() const = 0; |   virtual const PoseEstimate& pose_estimate() const = 0; | ||||||
| 
 | 
 | ||||||
|   virtual void AddRangefinderData(common::Time time, |   virtual void AddRangefinderData(common::Time time, | ||||||
|  |  | ||||||
|  | @ -113,7 +113,7 @@ string MapBuilder::SubmapToProto(const int trajectory_id, | ||||||
|            " trajectories."; |            " trajectories."; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   const int num_submaps = sparse_pose_graph_->num_submaps(trajectory_id); |   const int num_submaps = trajectory_builders_.at(trajectory_id)->num_submaps(); | ||||||
|   if (submap_index < 0 || submap_index >= num_submaps) { |   if (submap_index < 0 || submap_index >= num_submaps) { | ||||||
|     return "Requested submap " + std::to_string(submap_index) + |     return "Requested submap " + std::to_string(submap_index) + | ||||||
|            " from trajectory " + std::to_string(trajectory_id) + |            " from trajectory " + std::to_string(trajectory_id) + | ||||||
|  | @ -121,12 +121,10 @@ string MapBuilder::SubmapToProto(const int trajectory_id, | ||||||
|            " submaps in this trajectory."; |            " submaps in this trajectory."; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   const Submap* const submap = |   const auto submap_data = | ||||||
|       trajectory_builders_.at(trajectory_id)->submaps()->Get(submap_index); |       trajectory_builders_.at(trajectory_id)->GetSubmapData(submap_index); | ||||||
|   response->set_submap_version(submap->num_range_data()); |   CHECK(submap_data.submap != nullptr); | ||||||
|   const auto submap_pose = sparse_pose_graph_->GetSubmapTransform( |   submap_data.submap->ToResponseProto(submap_data.pose, response); | ||||||
|       SubmapId{trajectory_id, submap_index}); |  | ||||||
|   submap->ToResponseProto(submap_pose, response); |  | ||||||
|   return ""; |   return ""; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -53,13 +53,19 @@ class TrajectoryBuilder { | ||||||
|     sensor::PointCloud point_cloud; |     sensor::PointCloud point_cloud; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |   struct SubmapData { | ||||||
|  |     const Submap* submap; | ||||||
|  |     transform::Rigid3d pose; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|   TrajectoryBuilder() {} |   TrajectoryBuilder() {} | ||||||
|   virtual ~TrajectoryBuilder() {} |   virtual ~TrajectoryBuilder() {} | ||||||
| 
 | 
 | ||||||
|   TrajectoryBuilder(const TrajectoryBuilder&) = delete; |   TrajectoryBuilder(const TrajectoryBuilder&) = delete; | ||||||
|   TrajectoryBuilder& operator=(const TrajectoryBuilder&) = delete; |   TrajectoryBuilder& operator=(const TrajectoryBuilder&) = delete; | ||||||
| 
 | 
 | ||||||
|   virtual Submaps* submaps() = 0; |   virtual int num_submaps() = 0; | ||||||
|  |   virtual SubmapData GetSubmapData(int submap_index) = 0; | ||||||
|   virtual const PoseEstimate& pose_estimate() const = 0; |   virtual const PoseEstimate& pose_estimate() const = 0; | ||||||
| 
 | 
 | ||||||
|   virtual void AddSensorData(const string& sensor_id, |   virtual void AddSensorData(const string& sensor_id, | ||||||
|  |  | ||||||
|  | @ -28,8 +28,6 @@ | ||||||
| namespace cartographer { | namespace cartographer { | ||||||
| namespace mapping { | namespace mapping { | ||||||
| 
 | 
 | ||||||
| class Submaps; |  | ||||||
| 
 |  | ||||||
| struct TrajectoryNode { | struct TrajectoryNode { | ||||||
|   struct Data { |   struct Data { | ||||||
|     common::Time time; |     common::Time time; | ||||||
|  |  | ||||||
|  | @ -28,8 +28,15 @@ GlobalTrajectoryBuilder::GlobalTrajectoryBuilder( | ||||||
| 
 | 
 | ||||||
| GlobalTrajectoryBuilder::~GlobalTrajectoryBuilder() {} | GlobalTrajectoryBuilder::~GlobalTrajectoryBuilder() {} | ||||||
| 
 | 
 | ||||||
| Submaps* GlobalTrajectoryBuilder::submaps() { | int GlobalTrajectoryBuilder::num_submaps() { | ||||||
|   return local_trajectory_builder_.submaps(); |   return sparse_pose_graph_->num_submaps(trajectory_id_); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | GlobalTrajectoryBuilder::SubmapData GlobalTrajectoryBuilder::GetSubmapData( | ||||||
|  |     const int submap_index) { | ||||||
|  |   return {local_trajectory_builder_.submaps()->Get(submap_index), | ||||||
|  |           sparse_pose_graph_->GetSubmapTransform( | ||||||
|  |               mapping::SubmapId{trajectory_id_, submap_index})}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GlobalTrajectoryBuilder::AddRangefinderData( | void GlobalTrajectoryBuilder::AddRangefinderData( | ||||||
|  |  | ||||||
|  | @ -35,7 +35,8 @@ class GlobalTrajectoryBuilder | ||||||
|   GlobalTrajectoryBuilder(const GlobalTrajectoryBuilder&) = delete; |   GlobalTrajectoryBuilder(const GlobalTrajectoryBuilder&) = delete; | ||||||
|   GlobalTrajectoryBuilder& operator=(const GlobalTrajectoryBuilder&) = delete; |   GlobalTrajectoryBuilder& operator=(const GlobalTrajectoryBuilder&) = delete; | ||||||
| 
 | 
 | ||||||
|   Submaps* submaps() override; |   int num_submaps() override; | ||||||
|  |   SubmapData GetSubmapData(int submap_index) override; | ||||||
|   const mapping::GlobalTrajectoryBuilderInterface::PoseEstimate& pose_estimate() |   const mapping::GlobalTrajectoryBuilderInterface::PoseEstimate& pose_estimate() | ||||||
|       const override; |       const override; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -108,6 +108,8 @@ Submap::Submap(const MapLimits& limits, const Eigen::Vector2f& origin) | ||||||
| void Submap::ToResponseProto( | void Submap::ToResponseProto( | ||||||
|     const transform::Rigid3d&, |     const transform::Rigid3d&, | ||||||
|     mapping::proto::SubmapQuery::Response* const response) const { |     mapping::proto::SubmapQuery::Response* const response) const { | ||||||
|  |   response->set_submap_version(num_range_data()); | ||||||
|  | 
 | ||||||
|   Eigen::Array2i offset; |   Eigen::Array2i offset; | ||||||
|   CellLimits limits; |   CellLimits limits; | ||||||
|   probability_grid_.ComputeCroppedLimits(&offset, &limits); |   probability_grid_.ComputeCroppedLimits(&offset, &limits); | ||||||
|  |  | ||||||
|  | @ -30,8 +30,15 @@ GlobalTrajectoryBuilder::GlobalTrajectoryBuilder( | ||||||
| 
 | 
 | ||||||
| GlobalTrajectoryBuilder::~GlobalTrajectoryBuilder() {} | GlobalTrajectoryBuilder::~GlobalTrajectoryBuilder() {} | ||||||
| 
 | 
 | ||||||
| mapping_3d::Submaps* GlobalTrajectoryBuilder::submaps() { | int GlobalTrajectoryBuilder::num_submaps() { | ||||||
|   return local_trajectory_builder_->submaps(); |   return sparse_pose_graph_->num_submaps(trajectory_id_); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | GlobalTrajectoryBuilder::SubmapData GlobalTrajectoryBuilder::GetSubmapData( | ||||||
|  |     const int submap_index) { | ||||||
|  |   return {local_trajectory_builder_->submaps()->Get(submap_index), | ||||||
|  |           sparse_pose_graph_->GetSubmapTransform( | ||||||
|  |               mapping::SubmapId{trajectory_id_, submap_index})}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GlobalTrajectoryBuilder::AddImuData( | void GlobalTrajectoryBuilder::AddImuData( | ||||||
|  |  | ||||||
|  | @ -38,7 +38,8 @@ class GlobalTrajectoryBuilder | ||||||
|   GlobalTrajectoryBuilder(const GlobalTrajectoryBuilder&) = delete; |   GlobalTrajectoryBuilder(const GlobalTrajectoryBuilder&) = delete; | ||||||
|   GlobalTrajectoryBuilder& operator=(const GlobalTrajectoryBuilder&) = delete; |   GlobalTrajectoryBuilder& operator=(const GlobalTrajectoryBuilder&) = delete; | ||||||
| 
 | 
 | ||||||
|   mapping_3d::Submaps* submaps() override; |   int num_submaps() override; | ||||||
|  |   SubmapData GetSubmapData(int submap_index) override; | ||||||
|   void AddImuData(common::Time time, const Eigen::Vector3d& linear_acceleration, |   void AddImuData(common::Time time, const Eigen::Vector3d& linear_acceleration, | ||||||
|                   const Eigen::Vector3d& angular_velocity) override; |                   const Eigen::Vector3d& angular_velocity) override; | ||||||
|   void AddRangefinderData(common::Time time, const Eigen::Vector3f& origin, |   void AddRangefinderData(common::Time time, const Eigen::Vector3f& origin, | ||||||
|  |  | ||||||
|  | @ -329,6 +329,7 @@ Submap::Submap(const float high_resolution, const float low_resolution, | ||||||
| void Submap::ToResponseProto( | void Submap::ToResponseProto( | ||||||
|     const transform::Rigid3d& global_submap_pose, |     const transform::Rigid3d& global_submap_pose, | ||||||
|     mapping::proto::SubmapQuery::Response* const response) const { |     mapping::proto::SubmapQuery::Response* const response) const { | ||||||
|  |   response->set_submap_version(num_range_data()); | ||||||
|   // Generate an X-ray view through the 'hybrid_grid', aligned to the xy-plane
 |   // Generate an X-ray view through the 'hybrid_grid', aligned to the xy-plane
 | ||||||
|   // in the global map frame.
 |   // in the global map frame.
 | ||||||
|   const float resolution = high_resolution_hybrid_grid_.resolution(); |   const float resolution = high_resolution_hybrid_grid_.resolution(); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue