parseArguments function
							parent
							
								
									54c603d627
								
							
						
					
					
						commit
						f7b798e089
					
				|  | @ -50,7 +50,7 @@ class Experiment { | |||
| 
 | ||||
|   // false: run original iSAM2 without ambiguities
 | ||||
|   // true: run original iSAM2 with ambiguities
 | ||||
|   const bool isWithAmbiguity_; | ||||
|   const bool isWithAmbiguity; | ||||
| 
 | ||||
|  private: | ||||
|   ISAM2 isam2_; | ||||
|  | @ -61,7 +61,7 @@ class Experiment { | |||
|  public: | ||||
|   /// Construct with filename of experiment to run
 | ||||
|   explicit Experiment(const std::string& filename, bool isWithAmbiguity = false) | ||||
|       : dataset_(filename), isWithAmbiguity_(isWithAmbiguity) { | ||||
|       : dataset_(filename), isWithAmbiguity(isWithAmbiguity) { | ||||
|     ISAM2Params parameters; | ||||
|     parameters.optimizationParams = gtsam::ISAM2GaussNewtonParams(0.0); | ||||
|     parameters.relinearizeThreshold = 0.01; | ||||
|  | @ -101,7 +101,7 @@ class Experiment { | |||
|       size_t numMeasurements = poseArray.size(); | ||||
| 
 | ||||
|       Pose2 odomPose; | ||||
|       if (isWithAmbiguity_) { | ||||
|       if (isWithAmbiguity) { | ||||
|         // Get wrong intentionally
 | ||||
|         int id = index % numMeasurements; | ||||
|         odomPose = Pose2(poseArray[id]); | ||||
|  | @ -116,7 +116,7 @@ class Experiment { | |||
| 
 | ||||
|       } else {  // loop
 | ||||
|         int id = index % numMeasurements; | ||||
|         if (isWithAmbiguity_ && id % 2 == 0) { | ||||
|         if (isWithAmbiguity && id % 2 == 0) { | ||||
|           graph_.add(BetweenFactor<Pose2>(X(keyS), X(keyT), odomPose, | ||||
|                                           kPoseNoiseModel)); | ||||
|         } else { | ||||
|  | @ -178,6 +178,30 @@ class Experiment { | |||
|   } | ||||
| }; | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
| // Function to parse command-line arguments
 | ||||
| void parseArguments(int argc, char* argv[], size_t& maxLoopCount, | ||||
|                     bool& isWithAmbiguity) { | ||||
|   for (int i = 1; i < argc; ++i) { | ||||
|     std::string arg = argv[i]; | ||||
|     if (arg == "--max-loop-count" && i + 1 < argc) { | ||||
|       maxLoopCount = std::stoul(argv[++i]); | ||||
|     } else if (arg == "--is-with-ambiguity" && i + 1 < argc) { | ||||
|       isWithAmbiguity = bool(std::stoul(argv[++i])); | ||||
|     } else if (arg == "--help") { | ||||
|       std::cout << "Usage: " << argv[0] << " [options]\n" | ||||
|                 << "Options:\n" | ||||
|                 << "  --max-loop-count <value>       Set the maximum loop " | ||||
|                    "count (default: 2000)\n" | ||||
|                 << "  --is-with-ambiguity <value=0/1>     Set whether to use " | ||||
|                    "ambiguous measurements " | ||||
|                    "(default: false)\n" | ||||
|                 << "  --help                         Show this help message\n"; | ||||
|       std::exit(0); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
| int main(int argc, char* argv[]) { | ||||
|   Experiment experiment(findExampleDataFile("T1_City10000_04.txt")); | ||||
|  | @ -186,6 +210,10 @@ int main(int argc, char* argv[]) { | |||
|   // Experiment experiment("../data/mh_T1_T3_City10000_04.txt"); //Type #1 +
 | ||||
|   // Type #3
 | ||||
| 
 | ||||
|   // Parse command-line arguments
 | ||||
|   parseArguments(argc, argv, experiment.maxLoopCount, | ||||
|                  experiment.isWithAmbiguity); | ||||
| 
 | ||||
|   // Run the experiment
 | ||||
|   experiment.run(); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue