| 
									
										
										
										
											2010-10-14 12:54:38 +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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * -------------------------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * @file    smallExample.h | 
					
						
							|  |  |  |  * @brief   Create small example with two poses and one landmark | 
					
						
							|  |  |  |  * @brief   smallExample | 
					
						
							|  |  |  |  * @author  Carlos Nieto | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // \callgraph
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-10 04:15:44 +08:00
										 |  |  | #include <tests/simulated2D.h>
 | 
					
						
							| 
									
										
										
										
											2012-06-10 02:52:22 +08:00
										 |  |  | #include <gtsam/nonlinear/NonlinearFactorGraph.h>
 | 
					
						
							|  |  |  | #include <boost/tuple/tuple.hpp>
 | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace gtsam { | 
					
						
							| 
									
										
										
										
											2012-10-02 22:40:07 +08:00
										 |  |  |   namespace example { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     typedef NonlinearFactorGraph Graph; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Create small example for non-linear factor graph | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     boost::shared_ptr<const Graph> sharedNonlinearFactorGraph(); | 
					
						
							|  |  |  |     Graph createNonlinearFactorGraph(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Create values structure to go with it | 
					
						
							|  |  |  |      * The ground truth values structure for the example above | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     Values createValues(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Vector Values equivalent */ | 
					
						
							|  |  |  |     VectorValues createVectorValues(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * create a noisy values structure for a nonlinear factor graph | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     boost::shared_ptr<const Values> sharedNoisyValues(); | 
					
						
							|  |  |  |     Values createNoisyValues(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Zero delta config | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     VectorValues createZeroDelta(const Ordering& ordering); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Delta config that, when added to noisyValues, returns the ground truth | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     VectorValues createCorrectDelta(const Ordering& ordering); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * create a linear factor graph | 
					
						
							|  |  |  |      * The non-linear graph above evaluated at NoisyValues | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     GaussianFactorGraph createGaussianFactorGraph(const Ordering& ordering); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * create small Chordal Bayes Net x <- y | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     GaussianBayesNet createSmallGaussianBayesNet(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Create really non-linear factor graph (cos/sin) | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     boost::shared_ptr<const Graph> | 
					
						
							|  |  |  |     sharedReallyNonlinearFactorGraph(); | 
					
						
							|  |  |  |     Graph createReallyNonlinearFactorGraph(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Create a full nonlinear smoother | 
					
						
							|  |  |  |      * @param T number of time-steps | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     std::pair<Graph, Values> createNonlinearSmoother(int T); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Create a Kalman smoother by linearizing a non-linear factor graph | 
					
						
							|  |  |  |      * @param T number of time-steps | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     std::pair<FactorGraph<GaussianFactor>, Ordering> createSmoother(int T, boost::optional<Ordering> ordering = boost::none); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* ******************************************************* */ | 
					
						
							|  |  |  |     // Linear Constrained Examples
 | 
					
						
							|  |  |  |     /* ******************************************************* */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Creates a simple constrained graph with one linear factor and | 
					
						
							|  |  |  |      * one binary equality constraint that sets x = y | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     GaussianFactorGraph createSimpleConstraintGraph(); | 
					
						
							|  |  |  |     VectorValues createSimpleConstraintValues(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Creates a simple constrained graph with one linear factor and | 
					
						
							|  |  |  |      * one binary constraint. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     GaussianFactorGraph createSingleConstraintGraph(); | 
					
						
							|  |  |  |     VectorValues createSingleConstraintValues(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * Creates a constrained graph with a linear factor and two | 
					
						
							|  |  |  |      * binary constraints that share a node | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     GaussianFactorGraph createMultiConstraintGraph(); | 
					
						
							|  |  |  |     VectorValues createMultiConstraintValues(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* ******************************************************* */ | 
					
						
							|  |  |  |     // Planar graph with easy subtree for SubgraphPreconditioner
 | 
					
						
							|  |  |  |     /* ******************************************************* */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*
 | 
					
						
							|  |  |  |      * Create factor graph with N^2 nodes, for example for N=3 | 
					
						
							|  |  |  |      *  x13-x23-x33 | 
					
						
							|  |  |  |      *   |   |   | | 
					
						
							|  |  |  |      *  x12-x22-x32 | 
					
						
							|  |  |  |      *   |   |   | | 
					
						
							|  |  |  |      * -x11-x21-x31 | 
					
						
							|  |  |  |      * with x11 clamped at (1,1), and others related by 2D odometry. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     boost::tuple<GaussianFactorGraph, VectorValues> planarGraph(size_t N); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*
 | 
					
						
							|  |  |  |      * Create canonical ordering for planar graph that also works for tree | 
					
						
							|  |  |  |      * With x11 the root, e.g. for N=3 | 
					
						
							|  |  |  |      * x33 x23 x13 x32 x22 x12 x31 x21 x11 | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     Ordering planarOrdering(size_t N); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*
 | 
					
						
							|  |  |  |      * Split graph into tree and loop closing constraints, e.g., with N=3 | 
					
						
							|  |  |  |      *  x13-x23-x33 | 
					
						
							|  |  |  |      *   | | 
					
						
							|  |  |  |      *  x12-x22-x32 | 
					
						
							|  |  |  |      *   | | 
					
						
							|  |  |  |      * -x11-x21-x31 | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     std::pair<GaussianFactorGraph, GaussianFactorGraph > splitOffPlanarTree( | 
					
						
							|  |  |  |         size_t N, const GaussianFactorGraph& original); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   } // example
 | 
					
						
							| 
									
										
										
										
											2009-12-31 20:55:51 +08:00
										 |  |  | } // gtsam
 |