Added timing test for a long chain in iSAM2
							parent
							
								
									7309aa0ffa
								
							
						
					
					
						commit
						4e7393cc08
					
				|  | @ -0,0 +1,100 @@ | |||
| /* ----------------------------------------------------------------------------
 | ||||
| 
 | ||||
|  * GTSAM Copyright 2010, Georgia Tech Research Corporation, | ||||
|  * Atlanta, Georgia 30332-0415 | ||||
|  * All Rights Reserved | ||||
|  * Authors: Frank Dellaert, et al. (see THANKS for the full author list) | ||||
| 
 | ||||
|  * See LICENSE for the license information | ||||
|  * -------------------------------------------------------------------------- */ | ||||
| 
 | ||||
| /**
 | ||||
|  * @file    timeiSAM2Chain.cpp | ||||
|  * @brief   Times each iteration of a long chain in iSAM2, to measure asymptotic performance | ||||
|  * @author  Richard Roberts | ||||
|  */ | ||||
| 
 | ||||
| #include <gtsam/base/timing.h> | ||||
| #include <gtsam/slam/dataset.h> | ||||
| #include <gtsam/geometry/Pose2.h> | ||||
| #include <gtsam/slam/PriorFactor.h> | ||||
| #include <gtsam/slam/BetweenFactor.h> | ||||
| #include <gtsam/nonlinear/Symbol.h> | ||||
| #include <gtsam/nonlinear/ISAM2.h> | ||||
| #include <gtsam/nonlinear/Marginals.h> | ||||
| 
 | ||||
| #include <fstream> | ||||
| #include <boost/archive/binary_oarchive.hpp> | ||||
| #include <boost/archive/binary_iarchive.hpp> | ||||
| #include <boost/serialization/export.hpp> | ||||
| #include <boost/random/mersenne_twister.hpp> | ||||
| #include <boost/random/uniform_real.hpp> | ||||
| #include <boost/random/variate_generator.hpp> | ||||
| 
 | ||||
| using namespace std; | ||||
| using namespace gtsam; | ||||
| using namespace gtsam::symbol_shorthand; | ||||
| 
 | ||||
| typedef Pose2 Pose; | ||||
| 
 | ||||
| typedef NoiseModelFactor1<Pose> NM1; | ||||
| typedef NoiseModelFactor2<Pose,Pose> NM2; | ||||
| noiseModel::Unit::shared_ptr model = noiseModel::Unit::Create(Pose::Dim()); | ||||
| 
 | ||||
| int main(int argc, char *argv[]) { | ||||
| 
 | ||||
|   const size_t steps = 10000; | ||||
| 
 | ||||
|   cout << "Playing forward " << steps << " time steps..." << endl; | ||||
| 
 | ||||
|   ISAM2 isam2; | ||||
| 
 | ||||
|   // Times
 | ||||
|   vector<double> times(steps); | ||||
| 
 | ||||
|   for(size_t step=0; step < steps; ++step) { | ||||
| 
 | ||||
|     Values newVariables; | ||||
|     NonlinearFactorGraph newFactors; | ||||
| 
 | ||||
|     // Collect measurements and new variables for the current step
 | ||||
|     gttic_(Create_measurements); | ||||
|     if(step == 0) { | ||||
|       // Add prior
 | ||||
|       newFactors.add(PriorFactor<Pose>(0, Pose(), noiseModel::Unit::Create(Pose::Dim()))); | ||||
|       newVariables.insert(0, Pose()); | ||||
|     } else { | ||||
|       Vector eta = Vector::Random(Pose::Dim()) * 0.1; | ||||
|       Pose2 between = Pose().retract(eta); | ||||
|       // Add between
 | ||||
|       newFactors.add(BetweenFactor<Pose>(step-1, step, between, model)); | ||||
|       newVariables.insert(step, isam2.calculateEstimate<Pose>(step-1) * between); | ||||
|     } | ||||
| 
 | ||||
|     gttoc_(Create_measurements); | ||||
| 
 | ||||
|     // Update iSAM2
 | ||||
|     gttic_(Update_ISAM2); | ||||
|     isam2.update(newFactors, newVariables); | ||||
|     gttoc_(Update_ISAM2); | ||||
| 
 | ||||
|     tictoc_finishedIteration_(); | ||||
| 
 | ||||
|     tictoc_getNode(node, Update_ISAM2); | ||||
|     times[step] = node->time(); | ||||
| 
 | ||||
|     if(step % 1000 == 0) { | ||||
|       cout << "Step " << step << endl; | ||||
|       tictoc_print_(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   tictoc_print_(); | ||||
| 
 | ||||
|   // Write times
 | ||||
|   ofstream timesFile("times.txt"); | ||||
|   BOOST_FOREACH(double t, times) { | ||||
|     timesFile << t << "\n"; } | ||||
| 
 | ||||
|   return 0; | ||||
| } | ||||
		Loading…
	
		Reference in New Issue