36template <
typename T,
typename =
void>
40 T,
std::void_t<decltype(T::adjointMap(
41 std::declval<const typename traits<T>::TangentVector&>()))>>
52 static constexpr bool available =
false;
53 static constexpr bool expmapAvailable =
false;
61 typename traits<G>::TangentVector> {
62 static constexpr ActionType type = ActionType::Left;
66 "AdjointAction<G> requires G::adjointMap(TangentVector)");
68 TangentVector operator()(
const G& g,
const TangentVector& v,
73 if (Hg) *Hg = -(Ad * G::adjointMap(v));
78 return G::adjointMap(u);
95 :
public std::pair<G, typename traits<G>::TangentVector>,
97 internal::dimensionProduct(2, traits<G>::dimension)> {
101 "TangentLieGroup requires a fixed-dimensional base group");
103 "TangentLieGroup requires G::adjointMap(TangentVector)");
109 using This = TangentLieGroup<G>;
110 using Base = std::pair<G, typename traits<G>::TangentVector>;
113 using LieBase::dimension;
116 using TangentVector =
typename LieBase::TangentVector;
117 using Jacobian =
typename LieBase::Jacobian;
118 using ChartJacobian =
typename LieBase::ChartJacobian;
123 using LieBase::between;
124 using LieBase::compose;
126 using LieBase::inverse;
130 TangentLieGroup(
const G& g,
const BaseTangent& v) : Base(g, v) {}
131 TangentLieGroup(
const Base& base) : Base(base) {}
133 static TangentLieGroup Identity() {
return TangentLieGroup(); }
134 constexpr size_t dim()
const {
return dimension; }
136 TangentLieGroup operator*(
const TangentLieGroup& other)
const;
137 TangentLieGroup inverse()
const;
138 TangentLieGroup retract(
const TangentVector& xi, ChartJacobian H1 = {},
139 ChartJacobian H2 = {})
const;
140 TangentVector localCoordinates(
const TangentLieGroup& other,
141 ChartJacobian H1 = {},
142 ChartJacobian H2 = {})
const;
144 static TangentLieGroup Expmap(
const TangentVector& xi, ChartJacobian H = {});
145 static TangentLieGroup Expmap(
const Eigen::Ref<const BaseTangent>& u,
146 const Eigen::Ref<const BaseTangent>& v,
147 SplitJacobian H1 = {}, SplitJacobian H2 = {});
148 static TangentVector Logmap(
const TangentLieGroup& p, ChartJacobian H = {});
149 static TangentVector LocalCoordinates(
const TangentLieGroup& p,
150 ChartJacobian H = {}) {
154 Jacobian AdjointMap()
const;
155 static Jacobian adjointMap(
const TangentVector& xi);
157 void print(
const std::string& s =
"")
const;
158 bool equals(
const TangentLieGroup& other,
double tol = 1e-9)
const {
164 static std::pair<BaseTangent, BaseTangent> split(
const TangentVector& xi);
165 static TangentVector join(
const BaseTangent& u,
const BaseTangent& v);
166 static Jacobian rightJacobian(
const TangentVector& xi);
Internal implementation of TangentLieGroup.
Concept check for values that can be used in unit tests.
Group action concept and CRTP base class.
Base class and basic functions for Lie types.
constexpr int dimensionProduct(int n, int m)
Multiply compile-time dimensions, propagating Eigen::Dynamic.
Definition Lie.h:51
Global functions in a separate testing namespace.
Definition chartTesting.h:28
ActionType
Enum to specify whether the action is a Left or Right action.
Definition GroupAction.h:30
Group operator syntax flavors.
Definition Group.h:34
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
GroupAction CRTP base class.
Definition GroupAction.h:236
Chart-at-origin adapter for LieGroup-derived classes with explicit instance retract/localCoordinates ...
Definition Lie.h:65
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:114
static constexpr int Dim()
Definition Lie.h:121
TangentVector logmap(const This &g) const
Definition Lie.h:161
This expmap(const TangentVector &v) const
Definition Lie.h:155
std::enable_if_t< M !=Eigen::Dynamic, int > dim() const
Definition Lie.h:125
Both LieGroupTraits and Testable.
Definition Lie.h:346
Lie Group Concept.
Definition Lie.h:377
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:40
Enforces the static algebra-adjoint requirement of TangentLieGroup and AdjointAction below.
Definition TangentLieGroup.h:37
Optional closed-form kernels used by TangentLieGroup::Expmap() and its private rightJacobian() helper...
Definition TangentLieGroup.h:51
The adjoint action phi(g,v) = Ad_g v, also useful independently.
Definition TangentLieGroup.h:61
Tangent Lie group TG = G ⋉ 𝔤, with dimension 2 dim(G).
Definition TangentLieGroup.h:97
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:59