Test trimming within trajectory (#1020)
							parent
							
								
									e0e1c081e7
								
							
						
					
					
						commit
						94f564d871
					
				|  | @ -138,11 +138,11 @@ TEST_F(PoseGraph3DTest, PureLocalizationTrimmer) { | |||
|   const int num_submaps_to_keep = 3; | ||||
|   const int num_nodes_per_submap = 2; | ||||
|   for (int i = 0; i < num_submaps_to_create; ++i) { | ||||
|     int submap_index = 42 + i; | ||||
|     int submap_index = (i < 3) ? 42 + i : 100 + i; | ||||
|     auto submap = test::CreateFakeSubmap3D(trajectory_id, submap_index); | ||||
|     pose_graph_->AddSubmapFromProto(transform::Rigid3d::Identity(), submap); | ||||
|     for (int j = 0; j < num_nodes_per_submap; ++j) { | ||||
|       int node_index = 7 + num_nodes_per_submap * i + j; | ||||
|       int node_index = 7 + num_nodes_per_submap * submap_index + j; | ||||
|       auto node = test::CreateFakeNode(trajectory_id, node_index); | ||||
|       pose_graph_->AddNodeFromProto(transform::Rigid3d::Identity(), node); | ||||
|       proto::PoseGraph proto; | ||||
|  | @ -190,6 +190,83 @@ TEST_F(PoseGraph3DTest, PureLocalizationTrimmer) { | |||
|   } | ||||
| } | ||||
| 
 | ||||
| class EvenSubmapTrimmer : public PoseGraphTrimmer { | ||||
|  public: | ||||
|   explicit EvenSubmapTrimmer(int trajectory_id) | ||||
|       : trajectory_id_(trajectory_id) {} | ||||
| 
 | ||||
|   void Trim(Trimmable* pose_graph) override { | ||||
|     auto submap_ids = pose_graph->GetSubmapIds(trajectory_id_); | ||||
|     for (const auto submap_id : submap_ids) { | ||||
|       if (submap_id.submap_index % 2 == 0) { | ||||
|         pose_graph->MarkSubmapAsTrimmed(submap_id); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   bool IsFinished() override { return false; } | ||||
| 
 | ||||
|  private: | ||||
|   int trajectory_id_; | ||||
| }; | ||||
| 
 | ||||
| TEST_F(PoseGraph3DTest, EvenSubmapTrimmer) { | ||||
|   BuildPoseGraphWithFakeOptimization(); | ||||
|   const int trajectory_id = 2; | ||||
|   const int num_submaps_to_keep = 10; | ||||
|   const int num_submaps_to_create = 2 * num_submaps_to_keep; | ||||
|   const int num_nodes_per_submap = 3; | ||||
|   for (int i = 0; i < num_submaps_to_create; ++i) { | ||||
|     int submap_index = 42 + i; | ||||
|     auto submap = test::CreateFakeSubmap3D(trajectory_id, submap_index); | ||||
|     pose_graph_->AddSubmapFromProto(transform::Rigid3d::Identity(), submap); | ||||
|     for (int j = 0; j < num_nodes_per_submap; ++j) { | ||||
|       int node_index = 7 + num_nodes_per_submap * i + j; | ||||
|       auto node = test::CreateFakeNode(trajectory_id, node_index); | ||||
|       pose_graph_->AddNodeFromProto(transform::Rigid3d::Identity(), node); | ||||
|       proto::PoseGraph proto; | ||||
|       auto constraint = test::CreateFakeConstraint(node, submap); | ||||
|       constraint.set_tag(proto::PoseGraph::Constraint::INTRA_SUBMAP); | ||||
|       test::AddToProtoGraph(constraint, &proto); | ||||
|       pose_graph_->AddSerializedConstraints(FromProto(proto.constraint())); | ||||
|     } | ||||
|   } | ||||
|   pose_graph_->AddTrimmer( | ||||
|       common::make_unique<EvenSubmapTrimmer>(trajectory_id)); | ||||
|   pose_graph_->WaitForAllComputations(); | ||||
|   EXPECT_EQ( | ||||
|       pose_graph_->GetAllSubmapPoses().SizeOfTrajectoryOrZero(trajectory_id), | ||||
|       num_submaps_to_create); | ||||
|   EXPECT_EQ( | ||||
|       pose_graph_->GetAllSubmapData().SizeOfTrajectoryOrZero(trajectory_id), | ||||
|       num_submaps_to_create); | ||||
|   EXPECT_EQ( | ||||
|       pose_graph_->GetTrajectoryNodes().SizeOfTrajectoryOrZero(trajectory_id), | ||||
|       num_nodes_per_submap * num_submaps_to_create); | ||||
|   EXPECT_EQ(pose_graph_->GetTrajectoryNodePoses().SizeOfTrajectoryOrZero( | ||||
|                 trajectory_id), | ||||
|             num_nodes_per_submap * num_submaps_to_create); | ||||
|   EXPECT_EQ(pose_graph_->constraints().size(), | ||||
|             num_nodes_per_submap * num_submaps_to_create); | ||||
|   for (int i = 0; i < 2; ++i) { | ||||
|     pose_graph_->RunFinalOptimization(); | ||||
|     EXPECT_EQ( | ||||
|         pose_graph_->GetAllSubmapPoses().SizeOfTrajectoryOrZero(trajectory_id), | ||||
|         num_submaps_to_keep); | ||||
|     EXPECT_EQ( | ||||
|         pose_graph_->GetAllSubmapData().SizeOfTrajectoryOrZero(trajectory_id), | ||||
|         num_submaps_to_keep); | ||||
|     EXPECT_EQ( | ||||
|         pose_graph_->GetTrajectoryNodes().SizeOfTrajectoryOrZero(trajectory_id), | ||||
|         num_nodes_per_submap * num_submaps_to_keep); | ||||
|     EXPECT_EQ(pose_graph_->GetTrajectoryNodePoses().SizeOfTrajectoryOrZero( | ||||
|                   trajectory_id), | ||||
|               num_nodes_per_submap * num_submaps_to_keep); | ||||
|     EXPECT_EQ(pose_graph_->constraints().size(), | ||||
|               num_nodes_per_submap * num_submaps_to_keep); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| }  // namespace
 | ||||
| }  // namespace mapping
 | ||||
| }  // namespace cartographer
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue