| 
									
										
										
										
											2010-01-17 02:01:16 +08:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  *  @file  pose2SLAM.h | 
					
						
							| 
									
										
										
										
											2010-01-17 03:37:17 +08:00
										 |  |  |  *  @brief: 2D Pose SLAM | 
					
						
							| 
									
										
										
										
											2010-01-17 02:01:16 +08:00
										 |  |  |  *  @authors Frank Dellaert | 
					
						
							|  |  |  |  **/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "Key.h"
 | 
					
						
							|  |  |  | #include "Pose2.h"
 | 
					
						
							|  |  |  | #include "LieConfig.h"
 | 
					
						
							|  |  |  | #include "PriorFactor.h"
 | 
					
						
							|  |  |  | #include "BetweenFactor.h"
 | 
					
						
							|  |  |  | #include "NonlinearEquality.h"
 | 
					
						
							|  |  |  | #include "NonlinearFactorGraph.h"
 | 
					
						
							|  |  |  | #include "NonlinearOptimizer.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace gtsam { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Use pose2SLAM namespace for specific SLAM instance
 | 
					
						
							|  |  |  | 	namespace pose2SLAM { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Keys and Config
 | 
					
						
							| 
									
										
										
										
											2010-01-18 03:34:57 +08:00
										 |  |  | 		typedef TypedSymbol<Pose2, 'x'> Key; | 
					
						
							| 
									
										
										
										
											2010-01-17 02:01:16 +08:00
										 |  |  | 		typedef LieConfig<Key, Pose2> Config; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		/**
 | 
					
						
							|  |  |  | 		 * Create a circle of n 2D poses tangent to circle of radius R, first pose at (R,0) | 
					
						
							|  |  |  | 		 * @param n number of poses | 
					
						
							|  |  |  | 		 * @param R radius of circle | 
					
						
							|  |  |  | 		 * @param c character to use for keys | 
					
						
							|  |  |  | 		 * @return circle of n 2D poses | 
					
						
							|  |  |  | 		 */ | 
					
						
							|  |  |  | 		Config circle(size_t n, double R); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Factors
 | 
					
						
							|  |  |  | 		typedef PriorFactor<Config, Key, Pose2> Prior; | 
					
						
							| 
									
										
										
										
											2010-01-17 03:37:17 +08:00
										 |  |  | 		typedef BetweenFactor<Config, Key, Pose2> Constraint; | 
					
						
							|  |  |  | 		typedef NonlinearEquality<Config, Key, Pose2> HardConstraint; | 
					
						
							| 
									
										
										
										
											2010-01-17 02:01:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// Graph
 | 
					
						
							|  |  |  | 		struct Graph: public NonlinearFactorGraph<Config> { | 
					
						
							| 
									
										
										
										
											2010-01-18 13:51:19 +08:00
										 |  |  | 			typedef BetweenFactor<Config, Key, Pose2> Constraint; | 
					
						
							|  |  |  | 			typedef Pose2 Pose; | 
					
						
							| 
									
										
										
										
											2010-01-23 01:36:57 +08:00
										 |  |  | 			void addPrior(const Key& i, const Pose2& p, const SharedGaussian& model); | 
					
						
							|  |  |  | 			void addConstraint(const Key& i, const Key& j, const Pose2& z, const SharedGaussian& model); | 
					
						
							| 
									
										
										
										
											2010-01-17 03:37:17 +08:00
										 |  |  | 			void addHardConstraint(const Key& i, const Pose2& p); | 
					
						
							| 
									
										
										
										
											2010-01-17 02:01:16 +08:00
										 |  |  | 		}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Optimizer
 | 
					
						
							|  |  |  | 		typedef NonlinearOptimizer<Graph, Config> Optimizer; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	} // pose2SLAM
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Backwards compatibility | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	typedef pose2SLAM::Config Pose2Config; | 
					
						
							| 
									
										
										
										
											2010-01-17 03:37:17 +08:00
										 |  |  | 	typedef pose2SLAM::Prior Pose2Prior; | 
					
						
							|  |  |  | 	typedef pose2SLAM::Constraint Pose2Factor; | 
					
						
							| 
									
										
										
										
											2010-01-17 02:01:16 +08:00
										 |  |  | 	typedef pose2SLAM::Graph Pose2Graph; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } // namespace gtsam
 | 
					
						
							|  |  |  | 
 |