Stuff about manifolds

release/4.3a0
dellaert 2014-12-03 17:46:00 +01:00
parent 316bde9427
commit 7b5ddbf215
1 changed files with 23 additions and 3 deletions

View File

@ -34,9 +34,10 @@ The naming conventions are as follows:
typedef const int value_type; // const ? typedef const int value_type; // const ?
} }
* Functors: `gtsam::traits::someFunctor<T>::type`, i.e., they are mixedCase starting with a lowercase letter and define a functor `type`. Example * Functors: `gtsam::traits::someFunctor<T>::type`, i.e., they are mixedCase starting with a lowercase letter and define a functor `type`. The funcor itself should define a `result_type`. Example
struct Point2::retract { struct Point2::retract {
typedef Point2 result_type;
Point2 p_; Point2 p_;
retract(const Point2& p) : p_(p) {} retract(const Point2& p) : p_(p) {}
Point2 operator()(const Vector2& v) { Point2 operator()(const Vector2& v) {
@ -49,7 +50,13 @@ The naming conventions are as follows:
typedef Point2::retract type; typedef Point2::retract type;
} }
The above is still up in the air. Do we need the type indirection? The above is still up in the air. Do we need the type indirection? Could we just inherit the trait like so
template<>
gtsam::traits::retract<Point2> : Point2::retract {
}
In which case we could just say `gtsam::traits::retract<Point2>(p)(v)`.
tags tags
---- ----
@ -64,11 +71,24 @@ Concepts are associated with a tag.
Can be queried `gtsam::traits::structure_tag<T>` Can be queried `gtsam::traits::structure_tag<T>`
Testable
--------
* values: `print`, `equals`
Anything else?
Manifold Manifold
-------- --------
* types: `DefaultChart` [Manifolds](http://en.wikipedia.org/wiki/Manifold#Charts.2C_atlases.2C_and_transition_maps) and [charts](http://en.wikipedia.org/wiki/Manifold#Charts.2C_atlases.2C_and_transition_maps) are intimately linked concepts. We are only interested here in [differentiable manifolds](http://en.wikipedia.org/wiki/Differentiable_manifold#Definition), continuous spaces that can be locally approximated *at any point* using a local vector space, called the [tangent space](http://en.wikipedia.org/wiki/Tangent_space). A chart is an invertible map from the manifold to the vector space.
In GTSAM we assume that a manifold type can yield such a chart at any point, and we require that a functor `defaultChart` is available that
* values: `dimension` * values: `dimension`
* functors `defaultChart`
* types: `DefaultChart` is the *type* of chart returned by the functor `defaultChart`
* invariants: `defaultChart::result_type == DefaultChart::type`
Anything else? Anything else?