changing test names and adding documentation
							parent
							
								
									8d009c2fcf
								
							
						
					
					
						commit
						602db46f44
					
				|  | @ -39,9 +39,13 @@ TranslationRecovery::TranslationRecovery( | |||
|     const TranslationRecovery::TranslationEdges &relativeTranslations, | ||||
|     const LevenbergMarquardtParams &lmParams) | ||||
|     : params_(lmParams) { | ||||
|   TranslationEdges tempRelativeTranslations; | ||||
|   DSFMap<Key> sameTranslationDSF; | ||||
|   // Some relative translations may be zero. We treat nodes that have a zero
 | ||||
|   // relativeTranslation as a single node.
 | ||||
| 
 | ||||
|   // A DSFMap is used to find sets of nodes that have a zero relative
 | ||||
|   // translation. Add the nodes in each edge to the DSFMap, and merge nodes that
 | ||||
|   // are connected by a zero relative translation.
 | ||||
|   DSFMap<Key> sameTranslationDSF; | ||||
|   for (const auto &edge : relativeTranslations) { | ||||
|     Key key1 = sameTranslationDSF.find(edge.key1()); | ||||
|     Key key2 = sameTranslationDSF.find(edge.key2()); | ||||
|  | @ -49,6 +53,7 @@ TranslationRecovery::TranslationRecovery( | |||
|       sameTranslationDSF.merge(key1, key2); | ||||
|     } | ||||
|   } | ||||
|   // Use only those edges for which two keys have a distinct root in the DSFMap.
 | ||||
|   for (const auto &edge : relativeTranslations) { | ||||
|     Key key1 = sameTranslationDSF.find(edge.key1()); | ||||
|     Key key2 = sameTranslationDSF.find(edge.key2()); | ||||
|  | @ -56,6 +61,7 @@ TranslationRecovery::TranslationRecovery( | |||
|     relativeTranslations_.emplace_back(key1, key2, edge.measured(), | ||||
|                                        edge.noiseModel()); | ||||
|   } | ||||
|   // Store the DSF map for post-processing results.
 | ||||
|   sameTranslationNodes_ = sameTranslationDSF.sets(); | ||||
| } | ||||
| 
 | ||||
|  | @ -106,9 +112,13 @@ Values TranslationRecovery::run(const double scale) const { | |||
|   LevenbergMarquardtOptimizer lm(graph, initial, params_); | ||||
|   Values result = lm.optimize(); | ||||
| 
 | ||||
|   for (const auto &sameTranslationKeys : sameTranslationNodes_) { | ||||
|     Key optimizedKey = sameTranslationKeys.first; | ||||
|     std::set<Key> duplicateKeys = sameTranslationKeys.second; | ||||
|   // Nodes that were not optimized are stored in sameTranslationNodes_ as a map
 | ||||
|   // from a key that was optimized to keys that were not optimized. Iterate over
 | ||||
|   // map and add results for keys not optimized.
 | ||||
|   for (const auto &optimizedAndDuplicateKeys : sameTranslationNodes_) { | ||||
|     Key optimizedKey = optimizedAndDuplicateKeys.first; | ||||
|     std::set<Key> duplicateKeys = optimizedAndDuplicateKeys.second; | ||||
|     // Add the result for the duplicate key if it does not already exist.
 | ||||
|     for (const Key duplicateKey : duplicateKeys) { | ||||
|       if (result.exists(duplicateKey)) continue; | ||||
|       result.insert<Point3>(duplicateKey, result.at<Point3>(optimizedKey)); | ||||
|  |  | |||
|  | @ -89,7 +89,7 @@ TEST(TranslationRecovery, BAL) { | |||
|   // EXPECT_DOUBLES_EQUAL(0.0199833, actualError, 1e-5);
 | ||||
| } | ||||
| 
 | ||||
| TEST(TranslationRecovery, TwoPointTest) { | ||||
| TEST(TranslationRecovery, TwoPoseTest) { | ||||
|   // Create a dataset with 2 poses.
 | ||||
|   // __      __
 | ||||
|   // \/      \/
 | ||||
|  | @ -114,14 +114,14 @@ TEST(TranslationRecovery, TwoPointTest) { | |||
|   EXPECT_LONGS_EQUAL(1, graph.size()); | ||||
| 
 | ||||
|   // Run translation recovery
 | ||||
|   const auto result = algorithm.run(/*scale=*/2.0); | ||||
|   const auto result = algorithm.run(/*scale=*/3.0); | ||||
| 
 | ||||
|   // Check result for first two translations, determined by prior
 | ||||
|   EXPECT(assert_equal(Point3(0, 0, 0), result.at<Point3>(0))); | ||||
|   EXPECT(assert_equal(Point3(2, 0, 0), result.at<Point3>(1))); | ||||
|   EXPECT(assert_equal(Point3(3, 0, 0), result.at<Point3>(1))); | ||||
| } | ||||
| 
 | ||||
| TEST(TranslationRecovery, ThreePointTest) { | ||||
| TEST(TranslationRecovery, ThreePoseTest) { | ||||
|   // Create a dataset with 3 poses.
 | ||||
|   // __      __
 | ||||
|   // \/      \/
 | ||||
|  | @ -151,15 +151,15 @@ TEST(TranslationRecovery, ThreePointTest) { | |||
|   const auto graph = algorithm.buildGraph(); | ||||
|   EXPECT_LONGS_EQUAL(3, graph.size()); | ||||
| 
 | ||||
|   const auto result = algorithm.run(/*scale=*/2.0); | ||||
|   const auto result = algorithm.run(/*scale=*/3.0); | ||||
| 
 | ||||
|   // Check result
 | ||||
|   EXPECT(assert_equal(Point3(0, 0, 0), result.at<Point3>(0))); | ||||
|   EXPECT(assert_equal(Point3(2, 0, 0), result.at<Point3>(1))); | ||||
|   EXPECT(assert_equal(Point3(1, -1, 0), result.at<Point3>(3))); | ||||
|   EXPECT(assert_equal(Point3(3, 0, 0), result.at<Point3>(1))); | ||||
|   EXPECT(assert_equal(Point3(1.5, -1.5, 0), result.at<Point3>(3))); | ||||
| } | ||||
| 
 | ||||
| TEST(TranslationRecovery, TwoPointsAndZeroTranslation) { | ||||
| TEST(TranslationRecovery, ThreePosesIncludingZeroTranslation) { | ||||
|   // Create a dataset with 3 poses.
 | ||||
|   // __      __
 | ||||
|   // \/      \/
 | ||||
|  | @ -188,15 +188,15 @@ TEST(TranslationRecovery, TwoPointsAndZeroTranslation) { | |||
|   EXPECT_LONGS_EQUAL(1, graph.size());  | ||||
| 
 | ||||
|   // Run translation recovery
 | ||||
|   const auto result = algorithm.run(/*scale=*/2.0); | ||||
|   const auto result = algorithm.run(/*scale=*/3.0); | ||||
| 
 | ||||
|   // Check result
 | ||||
|   EXPECT(assert_equal(Point3(0, 0, 0), result.at<Point3>(0))); | ||||
|   EXPECT(assert_equal(Point3(2, 0, 0), result.at<Point3>(1))); | ||||
|   EXPECT(assert_equal(Point3(2, 0, 0), result.at<Point3>(2))); | ||||
|   EXPECT(assert_equal(Point3(3, 0, 0), result.at<Point3>(1))); | ||||
|   EXPECT(assert_equal(Point3(3, 0, 0), result.at<Point3>(2))); | ||||
| } | ||||
| 
 | ||||
| TEST(TranslationRecovery, ThreePointsAndZeroTranslation) { | ||||
| TEST(TranslationRecovery, FourPosesIncludingZeroTranslation) { | ||||
|   // Create a dataset with 4 poses.
 | ||||
|   // __      __
 | ||||
|   // \/      \/
 | ||||
|  | @ -229,13 +229,13 @@ TEST(TranslationRecovery, ThreePointsAndZeroTranslation) { | |||
|   EXPECT_LONGS_EQUAL(3, graph.size()); | ||||
| 
 | ||||
|   // Run translation recovery
 | ||||
|   const auto result = algorithm.run(/*scale=*/2.0); | ||||
|   const auto result = algorithm.run(/*scale=*/4.0); | ||||
| 
 | ||||
|   // Check result
 | ||||
|   EXPECT(assert_equal(Point3(0, 0, 0), result.at<Point3>(0))); | ||||
|   EXPECT(assert_equal(Point3(2, 0, 0), result.at<Point3>(1))); | ||||
|   EXPECT(assert_equal(Point3(2, 0, 0), result.at<Point3>(2))); | ||||
|   EXPECT(assert_equal(Point3(1, -1, 0), result.at<Point3>(3))); | ||||
|   EXPECT(assert_equal(Point3(4, 0, 0), result.at<Point3>(1))); | ||||
|   EXPECT(assert_equal(Point3(4, 0, 0), result.at<Point3>(2))); | ||||
|   EXPECT(assert_equal(Point3(2, -2, 0), result.at<Point3>(3))); | ||||
| } | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue