Commit Graph

30 Commits (88e465910a5111ed32e93adb999009dffcab8033)

Author SHA1 Message Date
Alex Cunningham 88e465910a SQP tests and implementation now use the new Key system 2010-01-19 05:33:44 +00:00
Frank Dellaert a4a6e002e5 NOISE MODEL.
This is a big edit but with no templates involed, so it should not be a big deal.

New namespace gtsam::noiseModel collects all noise models, which provide efficient whitening and chain-rule implementation needed for optimization. The class hierarchy gives us the ability to use models from full covariances to i.i.d. unit variance noise with a single interface, where the latter will be much cheaper. 

From now on, all non-linear factors take a shared_ptr to a Gaussian noise model. This is done through the parameter (const sharedGaussian& model). The use of a shared pointer allows us to share one noise models for thousands of factors, if applicable.

Just like Richard's Symbol change, there is a compile flag GTSAM_MAGIC_GAUSSIAN which allows you to use doubles, vectors, or matrices to created noise models on the fly. You have to set it to the correct dimension. Use of this is *not* encouraged and the flag will disappear after some good soul fixed all unit tests.
2010-01-18 05:38:53 +00:00
Richard Roberts aef0b42562 Refactoring to use a new Symbol key instead of strings in Bayes*, Gaussian*, Ordering, Symbolic*, VectorConfig. Renamed existing type-checking key Symbol<C,T> to TypedSymbol<C,T> 2010-01-17 19:34:57 +00:00
Frank Dellaert 6b3e8cf49c simulated2D now reduced to one .h and .cpp, in its own namespace, better naming, and new-style functions to serve as example 2010-01-14 02:50:06 +00:00
Frank Dellaert 93465945e9 Large gtsam refactoring
To support faster development *and* better performance Richard and I pushed through a large refactoring of NonlinearFactors.

The following are the biggest changes:

1) NonLinearFactor1 and NonLinearFactor2 are now templated on Config, Key type, and X type, where X is the argument to the measurement function.

2) The measurement itself is no longer kept in the nonlinear factor. Instead, a derived class (see testVSLAMFactor, testNonlinearEquality, testPose3Factor etc...) has to implement a function to compute the errors, "evaluateErrors". Instead of (h(x)-z), it needs to return (z-h(x)), so Ax-b is an approximation of the error. IMPORTANT: evaluateErrors needs - if asked - *combine* the calculation of the function value h(x) and the derivatives dh(x)/dx. This was a major performance issue. To do this, boost::optional<Matrix&> arguments are provided, and tin EvaluateErrors you just  says something like

	if (H) *H = Matrix_(3,6,....);

3) We are no longer using int or strings for nonlinear factors. Instead, the preferred key type is now Symbol, defined in Key.h. This is both fast and cool: you can construct it from an int, and cast it to a strong. It also does type checking: a Symbol<Pose3,'x'> will not match a Symbol<Pose2,'x'>

4) minor: take a look at LieConfig.h: it help you avoid writing a lot of code bu automatically creating configs for a certain type. See e.g. Pose3Config.h. A "double" LieConfig is on the way - Thanks Richard and Manohar !
2010-01-13 22:25:03 +00:00
Frank Dellaert 730f4a546f Added planar graph with easy subtree 2009-12-31 12:55:51 +00:00
Michael Kaess 75ab62a729 ISAM2 (nonlinear ISAM) partially there, unit test currently disabled 2009-12-29 05:57:05 +00:00
Frank Dellaert 16e1f6e56d use Vector_ for conciseness 2009-12-11 05:28:19 +00:00
Frank Dellaert d26664d975 Convenience functions for adding factors 2009-12-10 15:33:52 +00:00
Alex Cunningham c7b86cec97 Renamed ConditionalGaussian -> GaussianConditional 2009-11-12 16:41:18 +00:00
Alex Cunningham 77a1754b69 Renamed LinearFactor -> GaussianFactor, LinearFactorGraph -> GaussianFactorGraph 2009-11-12 16:16:32 +00:00
Alex Cunningham 2c37c94b5d Replaced the householder transform with the weighted system
Removed constrained components from makefile, they will disappear shortly
2009-11-09 21:34:20 +00:00
Frank Dellaert a3de1964d7 BIG CHANGE:
1) eliminate methods no longer return a shared pointer. Shared pointers are good for Factors and Conditionals (which are also non-copyable), because these are often passed around under the hood. However, a BayesNet is simple a list of shared pointers and hence does not cost a lot to return as an object (which is compiler-optimized anyway: there is no copy). So, the signature of all eliminate methods changed to simply return a BayesNet<> object (not a shared pointer).

2) GaussianBayesNet::optimize is now replaced by optimize(GaussianBayesNet) and returns a VectorConfig and not a shared pointer

3) GaussianBayesNet and SymbolicBayesNet are now simply typedefs, not derived classes. This is desirable because the BayesTree class uses templated methods that return BayesNet<Conditional>, not a specific BayesNet derived class.
2009-11-09 07:04:26 +00:00
Frank Dellaert bd54c39a73 Fixed bug in smoother example 2009-11-05 08:05:34 +00:00
Richard Roberts e2414561be Merged r895:900 from branch weightedQR - LinearFactorGraph now has sigmas and ConditionalGaussian now has precisions 2009-11-04 20:59:16 +00:00
Frank Dellaert eab038651e Renamed BayesNet::insert -> push_back. BayesTree now uses Bayes nets as nodes. 2009-11-02 05:17:44 +00:00
Frank Dellaert a8d267c4ca Small change necessitating lots of edits: Conditionals now include key of random variable
This simplifies Bayes nets quite a bit. Also created a Conditional base class, derived classes ConditionalGaussian and SymbolicConditional
Finally, some changes were needed because I moved some headers to .cpp
2009-11-02 03:50:30 +00:00
Frank Dellaert 943b692a6b BIG CHANGE: I got rid of the BayesChain/ChordalBayesNet classes and we now simply have a BayesNet class. It will just happen to be chordal when it is the result of an elimination. This will simplify a lot of things.
The main renaming that happened is

BayesChain -> BayesNet
ChordalBayesNet -> GaussianBayesNet == BayesNet<ConditionalGaussian>
SymbolicBayesChain -> SymbolicBayesNet == BayesNet<SymbolicConditional>
2009-10-31 19:53:20 +00:00
Frank Dellaert 68d2f81f0a Smoother now creates x1...xT, not x0 anymore 2009-10-31 16:54:38 +00:00
Frank Dellaert 4d9ff77249 moved timing example here from EasySLAM 2009-10-27 13:34:36 +00:00
Frank Dellaert 3792c79706 Fixed NonlinearFactor2 equals and added some unit tests for equals 2009-10-24 20:01:47 +00:00
Chris Beall 52bedcad3a order 1 factors by using map 2009-10-22 21:33:00 +00:00
Frank Dellaert 0d66ee8f72 comments only 2009-10-15 14:56:40 +00:00
Alex Cunningham 7d0a30c20f Renamed FGConfig to VectorConfig in gtsam, easylib, EasySLAM, and mast. 2009-10-14 20:39:59 +00:00
Alex Cunningham 8f20523e7f ConstrainedLinearFactorGraphs now handles multiple constraints on a node properly.
smallExample was changed to include two of the examples used in testConstrainedLinearFactorGraph
ConditionalGaussian was changed to make solve() virtual, as this is necessary for ConstrainedConditionalGaussian
2009-10-14 15:32:05 +00:00
Alex Cunningham 66dac8a52f Generalized constraint handling to create a LinearConstraint which implements linear equality constraints that can be eliminated as a part of a ConstrainedLinearFactorGraph. DeltaFunction has been changed to be a ConstrainedConditionalGaussian, which has a more robust solve() function. The new tests no longer use the "constrained" example from smallExample, so those functions have been commented.
''Limitations: ''
 * Any given node can only have one constraint on it, but constraints can be of arbitrary size
 * Constraints can only be specified as a blockwise system, where each block must be square and invertible to support arbitrary elimination orderings.  
  * ConstrainedNonlinearFactorGraph is disabled until a better solution for handling constraints in the nonlinear case is determined.
2009-10-08 13:57:22 +00:00
Frank Dellaert 989f290c99 '''BIG CHANGE''': avoid converting back and to FGConfigs by templating on configuration type. Details:
* Factors are now templated on the configuration type. Factor Graphs are now templated on the factor type and configuration type.
 * LinearFactor is a factor on an FGConfig.
 * LinearFactorGraph uses LinearFactor and FGConfig.
 * NonLinearFactor is still templated on Config.
 * NonLinearFactorGraph uses NonLinearFactors, but is still templated on Config.
 * Tests and VSLAMFactor have been updated to reflect those changes.
2009-10-06 18:25:04 +00:00
Frank Dellaert 68e20eec2c 2 BIG changes:
(1) FactorGraph and NonlinearOptimizer now no longer have a .cpp file, but a -inl.h file as in [http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml Google's C++ Style Guide]. This means if you expect to instantiate one of the functions in a cpp file, you have to include the -inl.h file.
(1) getOrdering is now in FactorGraph, and the non-linear version does *not* take a config anymore. 
Long version: I made this change because colamd works on the graph structure alone, and should not depend on the type of graph. Instead, because getOrdering happened to implemented in LinearFactorGraph first, the non-linear version converted to a linear factor graph (at the cost of an unnecessary linearization), and then threw all that away to call colamd. To implement this in a key-neutral way (a hidden agenda), i had to modify the keys_ type to a list, so a lot of changes resulted from that.
2009-09-13 04:13:03 +00:00
Frank Dellaert ead3d03866 BIG: replaced optimize in NonlinearFactorGraph with specialized NonlinearOptimizer object. This does away with the artificial ErrorVectorConfig and the like as NonlinearOptimizer is templated and can use "exmap", the exponential map defined for any differentiable manifold. 2009-09-09 04:43:04 +00:00
Richard Roberts d80fa24a9f Fixing directory structure 2009-08-21 22:23:24 +00:00