VectorSpace.h
Go to the documentation of this file.
1 /*
2  * VectorSpace.h
3  *
4  * @date December 21, 2014
5  * @author Mike Bosse
6  * @author Frank Dellaert
7  */
8 
9 #pragma once
10 
11 #include <gtsam/base/Lie.h>
12 
13 namespace gtsam {
14 
17 };
18 
19 template<typename T> struct traits;
20 
21 namespace internal {
22 
24 template<class Class, int N>
26 
32  static int GetDimension(const Class&) { return N;}
33 
34  static TangentVector Local(const Class& origin, const Class& other,
35  ChartJacobian H1 = {}, ChartJacobian H2 = {}) {
36  if (H1) *H1 = - Jacobian::Identity();
37  if (H2) *H2 = Jacobian::Identity();
38  Class v = other-origin;
39  return v.vector();
40  }
41 
42  static Class Retract(const Class& origin, const TangentVector& v,
43  ChartJacobian H1 = {}, ChartJacobian H2 = {}) {
44  if (H1) *H1 = Jacobian::Identity();
45  if (H2) *H2 = Jacobian::Identity();
46  return origin + v;
47  }
48 
50 
53 
55 
56  static TangentVector Logmap(const Class& m, ChartJacobian Hm = {}) {
57  if (Hm) *Hm = Jacobian::Identity();
58  return m.vector();
59  }
60 
61  static Class Expmap(const TangentVector& v, ChartJacobian Hv = {}) {
62  if (Hv) *Hv = Jacobian::Identity();
63  return Class(v);
64  }
65 
66  static Class Compose(const Class& v1, const Class& v2, ChartJacobian H1 = {},
67  ChartJacobian H2 = {}) {
68  if (H1) *H1 = Jacobian::Identity();
69  if (H2) *H2 = Jacobian::Identity();
70  return v1 + v2;
71  }
72 
73  static Class Between(const Class& v1, const Class& v2, ChartJacobian H1 = {},
74  ChartJacobian H2 = {}) {
75  if (H1) *H1 = - Jacobian::Identity();
76  if (H2) *H2 = Jacobian::Identity();
77  return v2 - v1;
78  }
79 
80  static Class Inverse(const Class& v, ChartJacobian H = {}) {
81  if (H) *H = - Jacobian::Identity();
82  return -v;
83  }
84 
85  static LieAlgebra Hat(const TangentVector& v) {
86  return v;
87  }
88 
89  static TangentVector Vee(const LieAlgebra& X) {
90  return X;
91  }
93 };
94 
96 template<class Class>
98 
101  static Class Compose(const Class& v1, const Class& v2) { return v1+v2;}
102  static Class Between(const Class& v1, const Class& v2) { return v2-v1;}
103  static Class Inverse(const Class& m) { return -m;}
105 
108  typedef Eigen::VectorXd TangentVector;
110  static int GetDimension(const Class& m) { return m.dim();}
111 
112  static Eigen::MatrixXd Eye(const Class& m) {
113  int dim = GetDimension(m);
114  return Eigen::MatrixXd::Identity(dim, dim);
115  }
116 
117  static TangentVector Local(const Class& origin, const Class& other,
118  ChartJacobian H1 = {}, ChartJacobian H2 = {}) {
119  if (H1) *H1 = - Eye(origin);
120  if (H2) *H2 = Eye(other);
121  Class v = other-origin;
122  return v.vector();
123  }
124 
125  static Class Retract(const Class& origin, const TangentVector& v,
126  ChartJacobian H1 = {}, ChartJacobian H2 = {}) {
127  if (H1) *H1 = Eye(origin);
128  if (H2) *H2 = Eye(origin);
129  return origin + v;
130  }
131 
133 
136 
137  static TangentVector Logmap(const Class& m, ChartJacobian Hm = {}) {
138  if (Hm) *Hm = Eye(m);
139  return m.vector();
140  }
141 
142  static Class Expmap(const TangentVector& v, ChartJacobian Hv = {}) {
143  Class result(v);
144  if (Hv)
145  *Hv = Eye(v);
146  return result;
147  }
148 
149  static Class Compose(const Class& v1, const Class& v2, ChartJacobian H1,
150  ChartJacobian H2 = {}) {
151  if (H1) *H1 = Eye(v1);
152  if (H2) *H2 = Eye(v2);
153  return v1 + v2;
154  }
155 
156  static Class Between(const Class& v1, const Class& v2, ChartJacobian H1,
157  ChartJacobian H2 = {}) {
158  if (H1) *H1 = - Eye(v1);
159  if (H2) *H2 = Eye(v2);
160  return v2 - v1;
161  }
162 
163  static Class Inverse(const Class& v, ChartJacobian H) {
164  if (H) *H = -Eye(v);
165  return -v;
166  }
167 
169 };
170 
172 template<class Class>
174 
175  inline constexpr static auto dim = Class::dimension;
176 
179 
181  p = Class::Identity(); // identity
182  q = p + p; // addition
183  q = p - p; // subtraction
184  v = p.vector(); // conversion to vector
185  q = p + v; // addition of a vector on the right
186  }
187 };
188 
193 template<class Class>
194 struct VectorSpaceTraits: VectorSpaceImpl<Class, Class::dimension> {
195 
196  // Check that Class has the necessary machinery
198 
200 
204  static Class Identity() { return Class::Identity();}
206 
209  inline constexpr static auto dimension = Class::dimension;
212 };
213 
215 template<class Class>
216 struct VectorSpace: Testable<Class>, VectorSpaceTraits<Class> {};
217 
220 template<typename Scalar>
221 struct ScalarTraits : VectorSpaceImpl<Scalar, 1> {
222 
224 
227  static void Print(Scalar m, const std::string& str = "") {
228  gtsam::print(m, str);
229  }
230  static bool Equals(Scalar v1, Scalar v2, double tol = 1e-8) {
231  return std::abs(v1 - v2) < tol;
232  }
234 
238  static Scalar Identity() { return 0;}
240 
244  inline constexpr static auto dimension = 1;
247 
249  ChartJacobian H1 = {}, ChartJacobian H2 = {}) {
250  if (H1) (*H1)[0] = -1.0;
251  if (H2) (*H2)[0] = 1.0;
253  result(0) = other - origin;
254  return result;
255  }
256 
258  ChartJacobian H1 = {}, ChartJacobian H2 = {}) {
259  if (H1) (*H1)[0] = 1.0;
260  if (H2) (*H2)[0] = 1.0;
261  return origin + v[0];
262  }
264 
268  if (H) (*H)[0] = 1.0;
269  return Local(0, m);
270  }
271 
272  static Scalar Expmap(const TangentVector& v, ChartJacobian H = {}) {
273  if (H) (*H)[0] = 1.0;
274  return v[0];
275  }
277 
278 };
279 
280 } // namespace internal
281 
283 template<> struct traits<double> : public internal::ScalarTraits<double> {
284 };
285 
287 template<> struct traits<float> : public internal::ScalarTraits<float> {
288 };
289 
290 // traits for any fixed double Eigen matrix
291 template<int M, int N, int Options, int MaxRows, int MaxCols>
292 struct traits<Eigen::Matrix<double, M, N, Options, MaxRows, MaxCols> > :
294  Eigen::Matrix<double, M, N, Options, MaxRows, MaxCols>, M * N> {
295 
298 
301  static void Print(const Fixed& m, const std::string& str = "") {
302  gtsam::print(Eigen::MatrixXd(m), str);
303  }
304  static bool Equals(const Fixed& v1, const Fixed& v2, double tol = 1e-8) {
305  return equal_with_abs_tol(v1, v2, tol);
306  }
308 
312  static Fixed Identity() { return Fixed::Zero();}
314 
317  inline constexpr static auto dimension = M * N;
322 
323  static TangentVector Local(const Fixed& origin, const Fixed& other,
324  ChartJacobian H1 = {}, ChartJacobian H2 = {}) {
325  if (H1) (*H1) = -Jacobian::Identity();
326  if (H2) (*H2) = Jacobian::Identity();
327  TangentVector result;
328  Eigen::Map<Fixed>(result.data()) = other - origin;
329  return result;
330  }
331 
332  static Fixed Retract(const Fixed& origin, const TangentVector& v,
333  ChartJacobian H1 = {}, ChartJacobian H2 = {}) {
334  if (H1) (*H1) = Jacobian::Identity();
335  if (H2) (*H2) = Jacobian::Identity();
336  return origin + Eigen::Map<const Fixed>(v.data());
337  }
339 
342  static TangentVector Logmap(const Fixed& m, ChartJacobian H = {}) {
343  if (H) *H = Jacobian::Identity();
344  TangentVector result;
345  Eigen::Map<Fixed>(result.data()) = m;
346  return result;
347  }
348 
349  static Fixed Expmap(const TangentVector& v, ChartJacobian H = {}) {
350  Fixed m;
351  m.setZero();
352  if (H) *H = Jacobian::Identity();
353  return m + Eigen::Map<const Fixed>(v.data());
354  }
356 };
357 
358 
359 namespace internal {
360 
361 // traits for dynamic Eigen matrices
362 template<int M, int N, int Options, int MaxRows, int MaxCols>
364 
367 
370  static void Print(const Dynamic& m, const std::string& str = "") {
371  gtsam::print(Eigen::MatrixXd(m), str);
372  }
373  static bool Equals(const Dynamic& v1, const Dynamic& v2,
374  double tol = 1e-8) {
375  return equal_with_abs_tol(v1, v2, tol);
376  }
378 
382  static Dynamic Identity() {
383  throw std::runtime_error("Identity not defined for dynamic types");
384  }
386 
389  inline constexpr static auto dimension = Eigen::Dynamic;
390  typedef Eigen::VectorXd TangentVector;
391  typedef Eigen::MatrixXd Jacobian;
394 
395  static int GetDimension(const Dynamic& m) {
396  return m.rows() * m.cols();
397  }
398 
399  static Jacobian Eye(const Dynamic& m) {
400  int dim = GetDimension(m);
402  }
403 
404  static TangentVector Local(const Dynamic& m, const Dynamic& other, //
405  ChartJacobian H1 = {}, ChartJacobian H2 = {}) {
406  if (H1) *H1 = -Eye(m);
407  if (H2) *H2 = Eye(m);
409  Eigen::Map<Dynamic>(v.data(), m.rows(), m.cols()) = other - m;
410  return v;
411  }
412 
413  static Dynamic Retract(const Dynamic& m, const TangentVector& v, //
414  ChartJacobian H1 = {}, ChartJacobian H2 = {}) {
415  if (H1) *H1 = Eye(m);
416  if (H2) *H2 = Eye(m);
417  return m + Eigen::Map<const Dynamic>(v.data(), m.rows(), m.cols());
418  }
420 
424 
425  static TangentVector Logmap(const Dynamic& m, ChartJacobian H = {}) {
426  if (H) *H = Eye(m);
428  Eigen::Map<Dynamic>(result.data(), m.cols(), m.rows()) = m;
429  return result;
430  }
431 
432  static Dynamic Expmap(const TangentVector& /*v*/, ChartJacobian H = {}) {
433  static_cast<void>(H);
434  throw std::runtime_error("Expmap not defined for dynamic types");
435  }
436 
437  static Dynamic Inverse(const Dynamic& m, ChartJacobian H = {}) {
438  if (H) *H = -Eye(m);
439  return -m;
440  }
441 
442  static Dynamic Compose(const Dynamic& v1, const Dynamic& v2,
443  ChartJacobian H1 = {}, ChartJacobian H2 = {}) {
444  if (H1) *H1 = Eye(v1);
445  if (H2) *H2 = Eye(v1);
446  return v1 + v2;
447  }
448 
449  static Dynamic Between(const Dynamic& v1, const Dynamic& v2,
450  ChartJacobian H1 = {}, ChartJacobian H2 = {}) {
451  if (H1) *H1 = -Eye(v1);
452  if (H2) *H2 = Eye(v1);
453  return v2 - v1;
454  }
455 
456  static LieAlgebra Hat(const TangentVector& v) {
457  return v;
458  }
459 
460  static TangentVector Vee(const LieAlgebra& X) {
461  return X;
462  }
463 
465 
466 };
467 
468 } // \ internal
469 
470 // traits for fully dynamic matrix
471 template<int Options, int MaxRows, int MaxCols>
472 struct traits<Eigen::Matrix<double, -1, -1, Options, MaxRows, MaxCols> > :
473  public internal::DynamicTraits<-1, -1, Options, MaxRows, MaxCols> {
474 };
475 
476 // traits for dynamic column vector
477 template<int Options, int MaxRows, int MaxCols>
478 struct traits<Eigen::Matrix<double, -1, 1, Options, MaxRows, MaxCols> > :
479  public internal::DynamicTraits<-1, 1, Options, MaxRows, MaxCols> {
480 };
481 
482 // traits for dynamic row vector
483 template<int Options, int MaxRows, int MaxCols>
484 struct traits<Eigen::Matrix<double, 1, -1, Options, MaxRows, MaxCols> > :
485  public internal::DynamicTraits<1, -1, Options, MaxRows, MaxCols> {
486 };
487 
489 template<typename T>
490 class IsVectorSpace: public IsLieGroup<T> {
491 public:
492 
494 
496  static_assert(
498  "This type's trait does not assert it as a vector space (or derived)");
499  r = p + q;
500  r = -p;
501  r = p - q;
502  }
503 
504 private:
505  T p, q, r;
506 };
507 
508 } // namespace gtsam
509 
gtsam::internal::DynamicTraits::Retract
static Dynamic Retract(const Dynamic &m, const TangentVector &v, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:413
gtsam::OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >
Definition: OptionalJacobian.h:189
gtsam::IsVectorSpace::structure_category_tag
traits< T >::structure_category structure_category_tag
Definition: VectorSpace.h:493
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::Retract
static Class Retract(const Class &origin, const TangentVector &v, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:125
H
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy y set format x g set format y g set format x2 g set format y2 g set format z g set angles radians set nogrid set key title set key left top Right noreverse box linetype linewidth samplen spacing width set nolabel set noarrow set nologscale set logscale x set set pointsize set encoding default set nopolar set noparametric set set set set surface set nocontour set clabel set mapping cartesian set nohidden3d set cntrparam order set cntrparam linear set cntrparam levels auto set cntrparam points set size set set xzeroaxis lt lw set x2zeroaxis lt lw set yzeroaxis lt lw set y2zeroaxis lt lw set tics in set ticslevel set tics set mxtics default set mytics default set mx2tics default set my2tics default set xtics border mirror norotate autofreq set ytics border mirror norotate autofreq set ztics border nomirror norotate autofreq set nox2tics set noy2tics set timestamp bottom norotate set rrange[*:*] noreverse nowriteback set trange[*:*] noreverse nowriteback set urange[*:*] noreverse nowriteback set vrange[*:*] noreverse nowriteback set xlabel matrix size set x2label set timefmt d m y n H
Definition: gnuplot_common_settings.hh:74
gtsam::internal::ScalarTraits::TangentVector
Eigen::Matrix< double, 1, 1 > TangentVector
Definition: VectorSpace.h:245
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::TangentVector
Eigen::VectorXd TangentVector
Definition: VectorSpace.h:108
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::Print
static void Print(const Fixed &m, const std::string &str="")
Definition: VectorSpace.h:301
Eigen
Namespace containing all symbols from the Eigen library.
Definition: jet.h:637
gtsam::internal::VectorSpaceImpl::Logmap
static TangentVector Logmap(const Class &m, ChartJacobian Hm={})
Definition: VectorSpace.h:56
gtsam::internal::VectorSpaceTraits::GTSAM_CONCEPT_ASSERT
GTSAM_CONCEPT_ASSERT(HasVectorSpacePrereqs< Class >)
gtsam::internal::ScalarTraits::Retract
static Scalar Retract(Scalar origin, const TangentVector &v, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:257
gtsam::internal::VectorSpaceImpl::Inverse
static Class Inverse(const Class &v, ChartJacobian H={})
Definition: VectorSpace.h:80
e
Array< double, 1, 3 > e(1./3., 0.5, 2.)
gtsam::internal::DynamicTraits::Logmap
static TangentVector Logmap(const Dynamic &m, ChartJacobian H={})
Definition: VectorSpace.h:425
gtsam::internal::VectorSpaceTraits::dimension
constexpr static auto dimension
Definition: VectorSpace.h:209
gtsam::internal::VectorSpace
VectorSpace provides both Testable and VectorSpaceTraits.
Definition: VectorSpace.h:216
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::GetDimension
static int GetDimension(const Class &m)
Definition: VectorSpace.h:110
gtsam::internal::HasVectorSpacePrereqs::v
Vector v
Definition: VectorSpace.h:178
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::Jacobian
Eigen::Matrix< double, dimension, dimension > Jacobian
Definition: VectorSpace.h:320
gtsam::internal::HasVectorSpacePrereqs::dim
constexpr static auto dim
Definition: VectorSpace.h:175
gtsam::internal::DynamicTraits::Dynamic
Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > Dynamic
Definition: VectorSpace.h:366
gtsam::internal::VectorSpaceTraits
Definition: VectorSpace.h:194
gtsam::internal::DynamicTraits::dimension
constexpr static auto dimension
Definition: VectorSpace.h:389
gtsam::internal::DynamicTraits::Jacobian
Eigen::MatrixXd Jacobian
Definition: VectorSpace.h:391
gtsam::equal_with_abs_tol
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
Definition: base/Matrix.h:80
gtsam::internal::ScalarTraits::Equals
static bool Equals(Scalar v1, Scalar v2, double tol=1e-8)
Definition: VectorSpace.h:230
gtsam::internal::ScalarTraits::Identity
static Scalar Identity()
Definition: VectorSpace.h:238
gtsam::Matrix
Eigen::MatrixXd Matrix
Definition: base/Matrix.h:39
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::ChartJacobian
OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic > ChartJacobian
Definition: VectorSpace.h:109
gtsam::internal::VectorSpaceImpl::ChartJacobian
OptionalJacobian< N, N > ChartJacobian
Definition: VectorSpace.h:30
gtsam::internal::DynamicTraits::Inverse
static Dynamic Inverse(const Dynamic &m, ChartJacobian H={})
Definition: VectorSpace.h:437
X
#define X
Definition: icosphere.cpp:20
gtsam::internal::VectorSpaceImpl
VectorSpaceTraits Implementation for Fixed sizes.
Definition: VectorSpace.h:25
gtsam::Vector
Eigen::VectorXd Vector
Definition: Vector.h:39
result
Values result
Definition: OdometryOptimize.cpp:8
gtsam::internal::ScalarTraits::Expmap
static Scalar Expmap(const TangentVector &v, ChartJacobian H={})
Definition: VectorSpace.h:272
gtsam::internal::DynamicTraits::Expmap
static Dynamic Expmap(const TangentVector &, ChartJacobian H={})
Definition: VectorSpace.h:432
gtsam::IsVectorSpace
Vector Space concept.
Definition: VectorSpace.h:490
gtsam::internal::VectorSpaceImpl::Retract
static Class Retract(const Class &origin, const TangentVector &v, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:42
gtsam::internal::DynamicTraits::Local
static TangentVector Local(const Dynamic &m, const Dynamic &other, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:404
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::ChartJacobian
OptionalJacobian< dimension, dimension > ChartJacobian
Definition: VectorSpace.h:321
gtsam::internal::VectorSpaceTraits::group_flavor
additive_group_tag group_flavor
Definition: VectorSpace.h:203
gtsam::print
void print(const Matrix &A, const string &s, ostream &stream)
Definition: Matrix.cpp:145
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::Between
static Class Between(const Class &v1, const Class &v2)
Definition: VectorSpace.h:102
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::Logmap
static TangentVector Logmap(const Fixed &m, ChartJacobian H={})
Definition: VectorSpace.h:342
gtsam::IsVectorSpace::p
T p
Definition: VectorSpace.h:505
gtsam::internal::VectorSpaceImpl::TangentVector
Eigen::Matrix< double, N, 1 > TangentVector
Definition: VectorSpace.h:29
gtsam::internal::DynamicTraits::Compose
static Dynamic Compose(const Dynamic &v1, const Dynamic &v2, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:442
gtsam::internal::VectorSpaceImpl::Between
static Class Between(const Class &v1, const Class &v2, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:73
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::Compose
static Class Compose(const Class &v1, const Class &v2)
Definition: VectorSpace.h:101
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::Retract
static Fixed Retract(const Fixed &origin, const TangentVector &v, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:332
gtsam::internal::ScalarTraits::structure_category
vector_space_tag structure_category
Definition: VectorSpace.h:223
gtsam::vector_space_tag
tag to assert a type is a vector space
Definition: VectorSpace.h:16
gtsam::internal::ScalarTraits::Logmap
static TangentVector Logmap(Scalar m, ChartJacobian H={})
Definition: VectorSpace.h:267
gtsam::internal::DynamicTraits::Vee
static TangentVector Vee(const LieAlgebra &X)
Definition: VectorSpace.h:460
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::Identity
static Fixed Identity()
Definition: VectorSpace.h:312
gtsam::internal::ScalarTraits::Print
static void Print(Scalar m, const std::string &str="")
Definition: VectorSpace.h:227
Eigen::Dynamic
const int Dynamic
Definition: Constants.h:22
gtsam::IsLieGroup
Definition: Lie.h:278
gtsam::internal::DynamicTraits::Hat
static LieAlgebra Hat(const TangentVector &v)
Definition: VectorSpace.h:456
gtsam::internal::VectorSpaceImpl::Local
static TangentVector Local(const Class &origin, const Class &other, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:34
Class::dimension
constexpr static auto dimension
Definition: testExpression.cpp:118
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::Fixed
Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > Fixed
Definition: VectorSpace.h:297
gtsam::internal::VectorSpaceImpl::Jacobian
Eigen::Matrix< double, N, N > Jacobian
Definition: VectorSpace.h:31
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::Inverse
static Class Inverse(const Class &m)
Definition: VectorSpace.h:103
gtsam::additive_group_tag
Definition: Group.h:34
m
Matrix3f m
Definition: AngleAxis_mimic_euler.cpp:1
gtsam::internal::DynamicTraits::GetDimension
static int GetDimension(const Dynamic &m)
Definition: VectorSpace.h:395
Eigen::Triplet< double >
gtsam::internal::VectorSpaceTraits::Identity
static Class Identity()
Definition: VectorSpace.h:204
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::Compose
static Class Compose(const Class &v1, const Class &v2, ChartJacobian H1, ChartJacobian H2={})
Definition: VectorSpace.h:149
Eigen::Map
A matrix or vector expression mapping an existing array of data.
Definition: Map.h:94
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::Inverse
static Class Inverse(const Class &v, ChartJacobian H)
Definition: VectorSpace.h:163
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::Equals
static bool Equals(const Fixed &v1, const Fixed &v2, double tol=1e-8)
Definition: VectorSpace.h:304
str
Definition: pytypes.h:1560
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::ManifoldType
Fixed ManifoldType
Definition: VectorSpace.h:318
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::structure_category
vector_space_tag structure_category
Definition: VectorSpace.h:296
gtsam::internal::DynamicTraits::ManifoldType
Dynamic ManifoldType
Definition: VectorSpace.h:393
gtsam::internal::DynamicTraits::Between
static Dynamic Between(const Dynamic &v1, const Dynamic &v2, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:449
gtsam::internal::VectorSpaceImpl::LieAlgebra
Eigen::Matrix< double, N, 1 > LieAlgebra
Definition: VectorSpace.h:54
gtsam::internal::HasVectorSpacePrereqs::GTSAM_CONCEPT_USAGE
GTSAM_CONCEPT_USAGE(HasVectorSpacePrereqs)
Definition: VectorSpace.h:180
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::Between
static Class Between(const Class &v1, const Class &v2, ChartJacobian H1, ChartJacobian H2={})
Definition: VectorSpace.h:156
gtsam::internal::DynamicTraits::TangentVector
Eigen::VectorXd TangentVector
Definition: VectorSpace.h:390
Lie.h
Base class and basic functions for Lie types.
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::TangentVector
Eigen::Matrix< double, dimension, 1 > TangentVector
Definition: VectorSpace.h:319
gtsam
traits
Definition: SFMdata.h:40
gtsam::Testable
Definition: Testable.h:152
gtsam::internal::ScalarTraits
Definition: VectorSpace.h:221
gtsam::internal::DynamicTraits::Print
static void Print(const Dynamic &m, const std::string &str="")
Definition: VectorSpace.h:370
Class::Identity
static Class Identity()
Definition: testExpression.cpp:121
gtsam::traits
Definition: Group.h:36
gtsam::internal::HasVectorSpacePrereqs::p
Class p
Definition: VectorSpace.h:177
gtsam::internal::VectorSpaceImpl::Hat
static LieAlgebra Hat(const TangentVector &v)
Definition: VectorSpace.h:85
gtsam::OptionalJacobian
Definition: OptionalJacobian.h:38
gtsam::IsVectorSpace::r
T r
Definition: VectorSpace.h:505
gtsam::internal::DynamicTraits::ChartJacobian
OptionalJacobian< dimension, dimension > ChartJacobian
Definition: VectorSpace.h:392
gtsam::internal::HasVectorSpacePrereqs
Requirements on type to pass it to Manifold template below.
Definition: VectorSpace.h:173
Class
Definition: testExpression.cpp:116
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::Logmap
static TangentVector Logmap(const Class &m, ChartJacobian Hm={})
Definition: VectorSpace.h:137
gtsam::internal::VectorSpaceImpl::Vee
static TangentVector Vee(const LieAlgebra &X)
Definition: VectorSpace.h:89
gtsam::internal::ScalarTraits::ManifoldType
Scalar ManifoldType
Definition: VectorSpace.h:243
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::group_flavor
additive_group_tag group_flavor
Definition: VectorSpace.h:311
origin
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy y set format x g set format y g set format x2 g set format y2 g set format z g set angles radians set nogrid set key title set key left top Right noreverse box linetype linewidth samplen spacing width set nolabel set noarrow set nologscale set logscale x set set pointsize set encoding default set nopolar set noparametric set set set set surface set nocontour set clabel set mapping cartesian set nohidden3d set cntrparam order set cntrparam linear set cntrparam levels auto set cntrparam points set size set origin
Definition: gnuplot_common_settings.hh:45
gtsam::internal::HasVectorSpacePrereqs::q
Class q
Definition: VectorSpace.h:177
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::Eye
static Eigen::MatrixXd Eye(const Class &m)
Definition: VectorSpace.h:112
gtsam::internal::VectorSpaceImpl::Compose
static Class Compose(const Class &v1, const Class &v2, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:66
v2
Vector v2
Definition: testSerializationBase.cpp:39
gtsam::internal::ScalarTraits::Local
static TangentVector Local(Scalar origin, Scalar other, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:248
gtsam::lie_group_tag
tag to assert a type is a Lie group
Definition: Lie.h:164
gtsam::internal::VectorSpaceTraits::ManifoldType
Class ManifoldType
Definition: VectorSpace.h:210
v
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
gtsam::internal::DynamicTraits::group_flavor
additive_group_tag group_flavor
Definition: VectorSpace.h:381
gtsam::internal::VectorSpaceImpl::Expmap
static Class Expmap(const TangentVector &v, ChartJacobian Hv={})
Definition: VectorSpace.h:61
gtsam::tol
const G double tol
Definition: Group.h:79
gtsam.examples.DogLegOptimizerExample.float
float
Definition: DogLegOptimizerExample.py:113
Eigen::Matrix< double, N, 1 >
abs
#define abs(x)
Definition: datatypes.h:17
gtsam::internal::VectorSpaceTraits::structure_category
vector_space_tag structure_category
Definition: VectorSpace.h:199
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::Local
static TangentVector Local(const Fixed &origin, const Fixed &other, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:323
N
#define N
Definition: igam.h:9
internal
Definition: BandTriangularSolver.h:13
gtsam::internal::ScalarTraits::dimension
constexpr static auto dimension
Definition: VectorSpace.h:244
gtsam::internal::ScalarTraits::ChartJacobian
OptionalJacobian< 1, 1 > ChartJacobian
Definition: VectorSpace.h:246
gtsam::internal::DynamicTraits
Definition: VectorSpace.h:363
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::Local
static TangentVector Local(const Class &origin, const Class &other, ChartJacobian H1={}, ChartJacobian H2={})
Definition: VectorSpace.h:117
gtsam::internal::VectorSpaceImpl::GetDimension
static int GetDimension(const Class &)
Definition: VectorSpace.h:32
Class::vector
const Vector3 & vector() const
Definition: testExpression.cpp:120
gtsam::traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >::Expmap
static Fixed Expmap(const TangentVector &v, ChartJacobian H={})
Definition: VectorSpace.h:349
gtsam::IsVectorSpace::q
T q
Definition: VectorSpace.h:505
test_callbacks.value
value
Definition: test_callbacks.py:162
pybind_wrapper_test_script.other
other
Definition: pybind_wrapper_test_script.py:42
gtsam::internal::DynamicTraits::Eye
static Jacobian Eye(const Dynamic &m)
Definition: VectorSpace.h:399
gtsam::internal::DynamicTraits::Identity
static Dynamic Identity()
Definition: VectorSpace.h:382
gtsam::internal::DynamicTraits::Equals
static bool Equals(const Dynamic &v1, const Dynamic &v2, double tol=1e-8)
Definition: VectorSpace.h:373
gtsam::IsVectorSpace::GTSAM_CONCEPT_USAGE
GTSAM_CONCEPT_USAGE(IsVectorSpace)
Definition: VectorSpace.h:495
v1
Vector v1
Definition: testSerializationBase.cpp:38
Scalar
SCALAR Scalar
Definition: bench_gemm.cpp:46
gtsam::internal::DynamicTraits::structure_category
vector_space_tag structure_category
Definition: VectorSpace.h:365
gtsam::internal::VectorSpaceImpl< Class, Eigen::Dynamic >::Expmap
static Class Expmap(const TangentVector &v, ChartJacobian Hv={})
Definition: VectorSpace.h:142
M
Matrix< RealScalar, Dynamic, Dynamic > M
Definition: bench_gemm.cpp:51
gtsam::internal::ScalarTraits::group_flavor
additive_group_tag group_flavor
Definition: VectorSpace.h:237


gtsam
Author(s):
autogenerated on Wed Mar 19 2025 03:09:01