  Common estimation algorithms, such as least squares estimation or the Kalman
filter, operate on a state in a state space S that is represented as a
real-valued vector. However, for many quantities, most notably orientations in
3D, S is not a vector space, but a so-called manifold, i.e. it behaves like a
vector space locally but has a more complex global topological structure. For
integrating these quantities, several ad-hoc approaches have been proposed.
  Here, we present a principled solution to this problem where the structure of
the manifold S is encapsulated by two operators, state displacement [+]:S x R^n
--> S and its inverse [-]: S x S --> R^n. These operators provide a local
vector-space view \delta; --> x [+] \delta; around a given state x. Generic
estimation algorithms can then work on the manifold S mainly by replacing +/-
with [+]/[-] where appropriate. We analyze these operators axiomatically, and
demonstrate their use in least-squares estimation and the Unscented Kalman
Filter. Moreover, we exploit the idea of encapsulation from a software
engineering perspective in the Manifold Toolkit, where the [+]/[-] operators
mediate between a "flat-vector" view for the generic algorithm and a
"named-members" view for the problem specific functions.
