25 #include <gtsam/base/concepts.h> 50 template <
typename T>
struct traits;
58 enum { dim = Class::dimension };
61 Eigen::Matrix<double, dim, 1> v;
65 v = p.localCoordinates(q);
71 template<
class Class,
int N>
74 static int GetDimension(
const Class&) {
83 static int GetDimension(
const Class& m) {
98 enum { dimension = Class::dimension };
101 typedef Class ManifoldType;
103 typedef Eigen::Matrix<double, dimension, 1> TangentVector;
106 static TangentVector Local(
const Class& origin,
const Class& other) {
107 return origin.localCoordinates(other);
111 static Class Retract(
const Class& origin,
const TangentVector& v) {
112 return origin.retract(v);
124 check_manifold_invariants(
const T& a,
const T& b,
double tol=1e-9) {
142 BOOST_CONCEPT_USAGE(IsManifold) {
144 (std::is_base_of<manifold_tag, structure_category_tag>::value),
145 "This type's structure_category trait does not assert it as a manifold (or derived)");
146 static_assert(TangentVector::SizeAtCompileTime == dim);
162 typedef const int value_type;
164 static_assert(value != Eigen::Dynamic,
165 "FixedDimension instantiated for dymanically-sized type.");
177 #define GTSAM_CONCEPT_MANIFOLD_INST(T) template class gtsam::IsManifold<T>; 178 #define GTSAM_CONCEPT_MANIFOLD_TYPE(T) using _gtsam_IsManifold_##T = gtsam::IsManifold<T>; tag to assert a type is a manifold
Definition: Manifold.h:30
Both ManifoldTraits and Testable.
Definition: Manifold.h:117
Requirements on type to pass it to Manifold template below.
Definition: Manifold.h:56
Concept check for values that can be used in unit tests.
Definition: Testable.h:152
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition: Manifold.h:161
Extra manifold traits for fixed-dimension types.
Definition: Manifold.h:72
Definition: Testable.h:59
typedef and functions to augment Eigen's MatrixXd
Definition: chartTesting.h:28
Definition: Manifold.h:92
GTSAM_CONCEPT_REQUIRES(IsGroup< G >, bool) check_group_invariants(const G &a
Check invariants.
Special class for optional Jacobian arguments.