26#include <boost/concept_check.hpp>
27#include <boost/concept/requires.hpp>
28#include <boost/type_traits/is_base_of.hpp>
53template <
typename T>
struct traits;
61 enum { dim = Class::dimension };
64 Eigen::Matrix<double, dim, 1> v;
68 v = p.localCoordinates(q);
74template<
class Class,
int N>
77 static int GetDimension(
const Class&) {
86 static int GetDimension(
const Class& m) {
101 enum { dimension = Class::dimension };
104 typedef Class ManifoldType;
106 typedef Eigen::Matrix<double, dimension, 1> TangentVector;
109 static TangentVector Local(
const Class& origin,
const Class& other) {
110 return origin.localCoordinates(other);
114 static Class Retract(
const Class& origin,
const TangentVector& v) {
115 return origin.retract(v);
127check_manifold_invariants(
const T& a,
const T& b,
double tol=1e-9) {
140 typedef typename traits<T>::structure_category structure_category_tag;
141 static const int dim = traits<T>::dimension;
142 typedef typename traits<T>::ManifoldType ManifoldType;
143 typedef typename traits<T>::TangentVector TangentVector;
145 BOOST_CONCEPT_USAGE(IsManifold) {
146 BOOST_STATIC_ASSERT_MSG(
147 (boost::is_base_of<manifold_tag, structure_category_tag>::value),
148 "This type's structure_category trait does not assert it as a manifold (or derived)");
149 BOOST_STATIC_ASSERT(TangentVector::SizeAtCompileTime == dim);
152 v = traits<T>::Local(p, q);
153 q = traits<T>::Retract(p, v);
165 typedef const int value_type;
167 BOOST_STATIC_ASSERT_MSG(value != Eigen::Dynamic,
168 "FixedDimension instantiated for dymanically-sized type.");
180#define GTSAM_CONCEPT_MANIFOLD_INST(T) template class gtsam::IsManifold<T>;
181#define GTSAM_CONCEPT_MANIFOLD_TYPE(T) using _gtsam_IsManifold_##T = gtsam::IsManifold<T>;
typedef and functions to augment Eigen's MatrixXd
Special class for optional Jacobian arguments.
Concept check for values that can be used in unit tests.
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
BOOST_CONCEPT_REQUIRES(((IsGroup< G >)),(bool)) check_group_invariants(const G &a
Check invariants.
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition: concepts.h:30
tag to assert a type is a manifold
Definition: Manifold.h:33
Requirements on type to pass it to Manifold template below.
Definition: Manifold.h:59
Extra manifold traits for fixed-dimension types.
Definition: Manifold.h:75
A helper that implements the traits interface for GTSAM manifolds.
Definition: Manifold.h:95
Both ManifoldTraits and Testable.
Definition: Manifold.h:120
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition: Manifold.h:164
Definition: Testable.h:58
A helper that implements the traits interface for GTSAM types.
Definition: Testable.h:151