gtsam
Loading...
Searching...
No Matches
gtsam::ProductLieGroup< G, H > Class Template Reference

Detailed Description

template<typename G, typename H>
class gtsam::ProductLieGroup< G, H >

Direct product Lie group G × H.

Operations are componentwise and tangent vectors concatenate the G and H coordinates. Use SemidirectLieGroup when the first factor acts on the second, and TangentLieGroup for the adjoint-action tangent construction. Standard Lie-group operations and their Jacobians are inherited from LieGroup; this class supplies the direct-product law, component charts, adjoints, and exponential/logarithmic kernels.

Inheritance diagram for gtsam::ProductLieGroup< G, H >:

Group Operations

typedef multiplicative_group_tag group_flavor
ProductLieGroup operator* (const ProductLieGroup &other) const
 Group multiplication.
ProductLieGroup inverse () const
 Group inverse.
Class between (const Class &g) const
Class between (const Class &g, ChartJacobian H1, ChartJacobian H2={}) const
SOn between (const SOn &g, DynamicJacobian H1, DynamicJacobian H2) const
Class compose (const Class &g) const
Class compose (const Class &g, ChartJacobian H1, ChartJacobian H2={}) const
SOn compose (const SOn &g, DynamicJacobian H1, DynamicJacobian H2) const
Class expmap (const TangentVector &v) const
 expmap as required by manifold concept Applies exponential map to v and composes with *this
template<class C = Class, class = internal::ExpmapWithJacobian<C, TangentVector, ChartJacobian>>
Class expmap (const TangentVector &v, ChartJacobian H1, ChartJacobian H2={}) const
 expmap with optional derivatives, when the class provides them
Class inverse (ChartJacobian H) const
TangentVector logmap (const Class &g) const
 logmap as required by manifold concept Applies logarithmic map to group element that takes *this to g
template<class C = Class, class = internal::LogmapWithJacobian<C, ChartJacobian>>
TangentVector logmap (const Class &g, ChartJacobian H1, ChartJacobian H2={}) const
 logmap with optional derivatives, when the class provides them
static ProductLieGroup Identity ()
 Identity element.

Lie Group Operations

Jacobian AdjointMap () const
 Adjoint map.
static ProductLieGroup Expmap (const TangentVector &v, ChartJacobian Hv={})
 Exponential map.
static ProductLieGroup Expmap (const Eigen::Ref< const typename traits< G >::TangentVector > &v1, const Eigen::Ref< const typename traits< H >::TangentVector > &v2, OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic > H1={}, OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic > H2={})
 Exponential map from subgroup tangent vectors.
static TangentVector Logmap (const ProductLieGroup &p, ChartJacobian Hp={})
 Logarithmic map.
static TangentVector LocalCoordinates (const ProductLieGroup &p, ChartJacobian Hp={})
 Local coordinates (same as Logmap).
static Jacobian adjointMap (const TangentVector &xi)
 Static Lie-algebra adjoint ad_xi.

Public Member Functions

Standard Constructors
 ProductLieGroup ()
 Default constructor yields identity.
 ProductLieGroup (const G &g, const H &h)
 Construct from two subgroup elements.
 ProductLieGroup (const Base &base)
 Construct from base pair.
Manifold Operations
size_t dim () const
 Return manifold dimension.
ProductLieGroup retract (const TangentVector &v, ChartJacobian H1={}, ChartJacobian H2={}) const
 Retract to manifold.
TangentVector localCoordinates (const ProductLieGroup &g, ChartJacobian H1={}, ChartJacobian H2={}) const
 Local coordinates on manifold.
Testable interface
void print (const std::string &s="") const
bool equals (const ProductLieGroup &other, double tol=1e-9) const
Public Member Functions inherited from gtsam::LieGroup< ProductLieGroup< G, H >, internal::dimensionSum(traits< G >::dimension, traits< H >::dimension)>
SOn compose (const SOn &g, DynamicJacobian H1, DynamicJacobian H2) const
SOn between (const SOn &g, DynamicJacobian H1, DynamicJacobian H2) const
GTSAM_EXPORT SOn compose (const SOn &g, DynamicJacobian H1, DynamicJacobian H2) const
GTSAM_EXPORT SOn between (const SOn &g, DynamicJacobian H1, DynamicJacobian H2) const
std::enable_if_t< M !=Eigen::Dynamic, int > dim () const
 Provided fixed dimension in dim() if needed.
const ProductLieGroup< G, H > & derived () const
ProductLieGroup< G, H > inverse (ChartJacobian H) const
ProductLieGroup< G, H > expmap (const TangentVector &v) const
 expmap as required by manifold concept Applies exponential map to v and composes with *this
TangentVector logmap (const ProductLieGroup< G, H > &g) const
 logmap as required by manifold concept Applies logarithmic map to group element that takes *this to g
ProductLieGroup< G, H > retract (const TangentVector &v) const
 retract as required by manifold concept: applies v at *this
TangentVector localCoordinates (const ProductLieGroup< G, H > &g) const
 localCoordinates as required by manifold concept: finds tangent vector between *this and g

Static Public Member Functions

static constexpr int Dim ()
 Static method to get the dimension (compile-time or dynamic).
Static Public Member Functions inherited from gtsam::LieGroup< ProductLieGroup< G, H >, internal::dimensionSum(traits< G >::dimension, traits< H >::dimension)>
static constexpr int Dim ()
 Static method to get the dimension (compile-time or dynamic).
static ProductLieGroup< G, H > Retract (const TangentVector &v)
 Retract at origin: possible in Lie group because it has an identity.
static TangentVector LocalCoordinates (const ProductLieGroup< G, H > &g)
 LocalCoordinates at origin: possible in Lie group because it has an identity.

Static Public Attributes

static constexpr auto dimension
Static Public Attributes inherited from gtsam::LieGroup< ProductLieGroup< G, H >, internal::dimensionSum(traits< G >::dimension, traits< H >::dimension)>
static constexpr auto dimension

Public Types

using This = ProductLieGroup<G, H>
using Base = std::pair<G, H>
 Base pair type.
using LieBase
using TangentVector = typename LieBase::TangentVector
using ChartJacobian = typename LieBase::ChartJacobian
using Jacobian = typename LieBase::Jacobian
using Jacobian1 = typename traits<G>::Jacobian
using Jacobian2 = typename traits<H>::Jacobian
Public Types inherited from gtsam::LieGroup< ProductLieGroup< G, H >, internal::dimensionSum(traits< G >::dimension, traits< H >::dimension)>
typedef OptionalJacobian< N, N > ChartJacobian
typedef Eigen::Matrix< double, N, N > Jacobian
typedef Eigen::Matrix< double, N, 1 > TangentVector

Classes

struct  ChartAtOrigin
 Component-wise chart at the product identity. More...

Protected Member Functions

size_t firstDim () const
size_t secondDim () const
void checkMatchingDimensions (const ProductLieGroup &other, const char *operation) const
 Check that another product has matching runtime dimensions.

Static Protected Member Functions

template<typename T>
static T defaultIdentity ()
 Return default identity for fixed-size factors and a placeholder for dynamic ones.
template<typename T, int ComponentDimension = traits<T>::dimension>
static traits< T >::TangentVector tangentSegment (const TangentVector &v, size_t start, size_t d)
 Extract a tangent segment for one factor.
template<typename T>
static traits< T >::Jacobian componentAdjointMap (const typename traits< T >::TangentVector &xi)
 Compute one factor's static algebra adjoint, including vector spaces.
static TangentVector makeTangentVector (const typename traits< G >::TangentVector &v1, const typename traits< H >::TangentVector &v2, size_t d1, size_t d2)
 Concatenate subgroup tangent vectors into the product tangent.
static Jacobian zeroJacobian (size_t d)
 Create a zero Jacobian with the requested runtime size.

Static Protected Attributes

static constexpr int n = traits<G>::dimension
 Dimensions of the two subgroups.
static constexpr int m = traits<H>::dimension
static constexpr bool firstDynamic = n == Eigen::Dynamic
static constexpr bool secondDynamic = m == Eigen::Dynamic

Member Typedef Documentation

◆ LieBase

template<typename G, typename H>
using gtsam::ProductLieGroup< G, H >::LieBase
Initial value:
constexpr int dimensionSum(int n, int m)
Sum compile-time dimensions, propagating Eigen::Dynamic.
Definition Lie.h:46
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:114

Member Function Documentation

◆ adjointMap()

template<typename G, typename H>
ProductLieGroup< G, H >::Jacobian gtsam::ProductLieGroup< G, H >::adjointMap ( const TangentVector & xi)
static

Static Lie-algebra adjoint ad_xi.

Vector-space factors are treated as abelian; other factors must provide a static adjointMap().


The documentation for this class was generated from the following files: