gtsam
Loading...
Searching...
No Matches
expressions.h
Go to the documentation of this file.
1
7
8#pragma once
9
10#include <gtsam/base/Lie.h>
12
13#include <type_traits>
14
15namespace gtsam {
16
17// Generic between, assumes existence of traits<T>::Between
18template <typename T>
19Expression<T> between(const Expression<T>& t1, const Expression<T>& t2) {
20 return Expression<T>(traits<T>::Between, t1, t2);
21}
22
23// Generic compose, assumes existence of traits<T>::Compose
24template <typename T>
25Expression<T> compose(const Expression<T>& t1, const Expression<T>& t2) {
26 return Expression<T>(traits<T>::Compose, t1, t2);
27}
28
29namespace internal {
30
32template <typename T>
33T expmapValue(const typename traits<T>::TangentVector& tangent,
34 typename MakeOptionalJacobian<
35 T, typename traits<T>::TangentVector>::type H = {}) {
36 return traits<T>::Expmap(tangent, H);
37}
38
39} // namespace internal
40
42template <typename T>
44 const Expression<T>& origin,
45 const Expression<typename traits<T>::TangentVector>& tangent) {
46 return compose(origin, Expression<T>(&internal::expmapValue<T>, tangent));
47}
48
49namespace internal {
50
52template <typename T>
53T scaleVector(double scale, const T& vector,
54 typename MakeOptionalJacobian<T, double>::type Hscale,
55 typename MakeOptionalJacobian<T, T>::type Hvector) {
56 using Jacobian = typename MakeJacobian<T, T>::type;
57 if (Hscale) *Hscale = vector;
58 if (Hvector) *Hvector = scale * Jacobian::Identity();
59 return scale * vector;
60}
61
62} // namespace internal
63
65template <typename T, typename std::enable_if<
66 !std::is_same<T, double>::value>::type* = nullptr>
68 const Expression<T>& vector) {
69 return Expression<T>(internal::scaleVector<T>, scale, vector);
70}
71
72// Some typedefs
73typedef Expression<double> Double_;
74typedef Expression<Vector1> Vector1_;
75typedef Expression<Vector2> Vector2_;
76typedef Expression<Vector3> Vector3_;
77typedef Expression<Vector4> Vector4_;
78typedef Expression<Vector5> Vector5_;
79typedef Expression<Vector6> Vector6_;
80typedef Expression<Vector7> Vector7_;
81typedef Expression<Vector8> Vector8_;
82typedef Expression<Vector9> Vector9_;
83
84} // namespace gtsam
Base class and basic functions for Lie types.
Expressions for Block Automatic Differentiation.
Global functions in a separate testing namespace.
Definition chartTesting.h:28
Expression< T > expmap(const Expression< T > &origin, const Expression< typename traits< T >::TangentVector > &tangent)
Apply an exponential-map increment to a Lie-group expression.
Definition expressions.h:43
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:52
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
: meta-function to generate JacobianTA optional reference Used mainly by Expressions
Definition OptionalJacobian.h:263
Expression class that supports automatic differentiation.
Definition Expression.h:49
T scaleVector(double scale, const T &vector, typename MakeOptionalJacobian< T, double >::type Hscale, typename MakeOptionalJacobian< T, T >::type Hvector)
Scale a fixed-size vector-like value and provide both Jacobians.
Definition expressions.h:53
T expmapValue(const typename traits< T >::TangentVector &tangent, typename MakeOptionalJacobian< T, typename traits< T >::TangentVector >::type H={})
Adapt a traits exponential map to Expression's unary function signature.
Definition expressions.h:33