The Borg Lab

GTSAM 2.1.0 Changes

GTSAM 2.1.0 Changes (from 2.0.0)

New or improved features:

  • Comprehensive object-oriented MATLAB wrapper:  rapid application-building or prototyping, easy access to internal numerical data, and access to GTSAM via the interactive MATLAB command line.  Syntax and classes match the C++ API.  A set of MATLAB examples is included in the matlab directory.
  • Hands-on introduction and tutorial on smoothing-and-mapping and factor graphs.
  • Sparse Preconditioned Conjugate Gradient Optimization for graphs that are too densely-connected for direct solution methods.
  • API refinements and minor performance improvements.
  • Full support (editing and compiling) for Windows / Visual Studio using CMake-generated solution files.

Main API changes:

  • Standardized API for creating noise models.  Use the static functions in the noise model classes, such as noiseModel::Diagonal::Precisions, noiseModel::Unit::Create, etc.
  • All nonlinear variables are now referred to by a type gtsam::Key, which is a typedef to size_t, and may be any non-negative integer.  Variable Keys in a factor graph need not be consecutive or contiguous.
  • In conjunction with the new Key type, you may still use Symbol to add an identifying character to separate different variable groups:
    • For example, Symbol('x',5) and Symbol('l',5) reference different variables.
    • Internally, the indentifying character ('x', 'l', etc) is encoded in the high-order part of the Key integer.
    • Symbol is automatically convertible to and from Key, so it may be used where Key is expected, e.g. values.insert(Symbol('x',5), myPose2);
    • Print functions throughout the nonlinear and slam modules automatically detect Symbol-encoded Keys and print the letter, e.g. "x5".
    • Key encoding can be extended by creating your own class that is automatically convertible to and from Key, and your own KeyFormatter function to be passed into print functions (see Symbol.h and Symbol.cpp as an example).
  • The SLAM namespaces (e.g. pose2SLAM, visualSLAM) have been removed - over time they grew unnecessary as the main generic GTSAM interface became cleaner.  In their place, simply use the standard GTSAM API, as demonstrated in the examples and tutorial.

Older change lists: