| 
									
										
										
										
											2010-10-26 23:01:34 +08:00
										 |  |  | /* ----------------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * 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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * -------------------------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-22 06:51:20 +08:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * ISAMLoop.h | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Created on: Jan 19, 2010 | 
					
						
							|  |  |  |  *      Author: Viorela Ila and Richard Roberts | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <gtsam/linear/GaussianConditional.h>
 | 
					
						
							|  |  |  | #include <gtsam/nonlinear/Ordering.h>
 | 
					
						
							|  |  |  | #include <gtsam/nonlinear/NonlinearFactorGraph.h>
 | 
					
						
							|  |  |  | #include <gtsam/linear/GaussianISAM.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template<class Values> | 
					
						
							|  |  |  | class ISAMLoop { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   typedef gtsam::NonlinearFactorGraph<Values> Factors; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | //protected:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** The internal iSAM object */ | 
					
						
							|  |  |  |   gtsam::GaussianISAM isam; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** The current linearization point */ | 
					
						
							|  |  |  |   Values linPoint_; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** The ordering */ | 
					
						
							|  |  |  |   gtsam::Ordering ordering_; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** The original factors, used when relinearizing */ | 
					
						
							|  |  |  |   Factors factors_; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** The reordering interval and counter */ | 
					
						
							|  |  |  |   int reorderInterval_; | 
					
						
							|  |  |  |   int reorderCounter_; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |   ISAMLoop() : reorderInterval_(0), reorderCounter_(0) {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** Periodically reorder and relinearize */ | 
					
						
							|  |  |  |   ISAMLoop(int reorderInterval) : reorderInterval_(reorderInterval), reorderCounter_(0) {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** Add new factors along with their initial linearization points */ | 
					
						
							|  |  |  |   void update(const Factors& newFactors, const Values& initialValues); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** Return the current solution estimate */ | 
					
						
							|  |  |  |   Values estimate(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** Return the current linearization point */ | 
					
						
							|  |  |  |   const Values& getLinearizationPoint() { return linPoint_; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** Get the ordering */ | 
					
						
							|  |  |  |   const gtsam::Ordering& getOrdering() const { return ordering_; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const Factors& getFactorsUnsafe() { return factors_; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /**
 | 
					
						
							|  |  |  |    * Relinearization and reordering of variables | 
					
						
							|  |  |  |    */ | 
					
						
							|  |  |  |   void reorder_relinearize(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }; |