Wiki

Clone wiki

gtsam / GTSAM 4 Roadmap

GTSAM 4 Roadmap

This is a draft roadmap of completing the development for GTSAM 4, in order of priority (might help to refer to GTSAM Overview). Every one of the bullet points should be implemented via a Pull Request titled "GTSAM 4 Roadmap: xxx".

Expressions

Expressions are a whole new framework that allows one to create arbitrary expression trees that can calculate their own derivatives. The (slower) Ceres-Style Auto-differentiation is also supported.

  • Move Expressions to nonlinear (#174) @dellaert
  • Move AdaptAutodiff to nonlinear and all Ceres headers to third-party (#142) @cbeall3
  • Make all functions in Geometry fixed size derivatives. (#150) @nsrinivasan7
  • MatrixRef/Optional combo? done, used in #150 @dellaert ?
  • Move expressions.h files into geometry/sam/sfm (#176) @dellaert
  • Remove result values in ExpressionTrace (#152) @dellaert
  • Look into Expression serialization, at least those composed from expressions.h (#171) @ptf ?

ExpressionFactors

ExpressionFactors can take any expression to implement a |z-e(x)|^2 factor. We will keep the old factors for convenience, but they will simply be derived from ExpressionFactor.

  • Move ExpressionFactor to nonlinear
  • Move all SLAM factors to the new sam module: @nsrinivasan7
  • Move all SFM factors to the new sfm module, same idea: @cbeall3
  • Add some examples that show off Expressions

For moving factors into the new modules:

  • Only ExpressionFactors are allowed in sam and sfm
  • Old headers in slam module should forward to new header, and cause a warning
  • Besides the old key-based constructors, each factor also needs an expression-based constructor.

Modernization:

Traits allow us to optimize over arbitrary types. This mostly works but needs to be cleaned up a bit, and it will make some GTSAM 3 things outdated. Also, we should completely embrace Eigen.

  • Fix all MATLAB examples (#145, #146) @lvzhaoyang
  • Test and provide example of optimizing vectors/matrices (#161) @KrunalChande
  • Deprecate LieScalar, LieVector, LieMatrix (#158) @cforster
  • Deprecate dim and Dim (#155)
  • Use perftools malloc? (#133) @jdong37
  • Clean up traits: there should be no default traits, Matrix traits should move to Matrix.h @mikebosse ?
  • Clean up Charts: no default charts, have Rot3 and Pose3 charts switchable (with same flags) @dellaert
  • We should realize some types are Vector spaces, in which case the chart is just +/-.
  • Deprecate LinearizedFactor, LinearContainer etc...
  • Completely embrace Eigen: deprecate Matrix and Vector headers (add include warning). base/Eigen.h @alexhagiopol
  • Mix RotM/Rot3Q at run-time (#138) @lvzhaoyang
  • Document how to wrap external types using traits and charts

Python Wrapper

We want it! We need it! We'd love it!

  • make wrap generate boost-python stuff (#119) @amelim
  • create some examples @amelim

PCG: Preconditioned Gradient Descent

We want a completely GTSAM head-to-head comparison with Ceres, based on smart factors.

  • Move all Smart factors to a new smart module @lucacarlone
  • Fix Yong-Dian's PCG implementation @stan84
  • Create timings for journal paper @stan84

Constraints

QP is hot in robotics, and we are moving GTSAM into Optimal Control territory. But this depends crucially on constrained optimization. In addition, good old equality constraints need to be modernized.

  • Deprecate NonlinearEquality.. in favor of nonlinear/EqualityConstraint. Should allow Ax==b for VectorSpaces @jdong37
  • Also add linear/EqualityConstraint, which is result of linearizing nonlinear/EqualityConstraint, also does general Ax==b @thduynguyen
  • Add LP and QP solvers, both based on active-set LinearInequalityConstraint
  • Give examples on how to create on the fly non-linear constraints using expressions.
  • Add a NonlinearConstraint that implements a interior-point (IP)-style LogBarrier barrier function
  • Have a Newton-based interior-point (IP) solver by having LevenbergMarquardt and Dogleg detect and handle LogBarrier
  • Have a full primal-dual IP solver (Duy has this, but we need to migrate it carefully - does some non-kosher things)

Updated