7#include "detail/bundle.hpp"
8#include "detail/macro.hpp"
9#include "detail/tn.hpp"
10#include "lie_group_base.hpp"
17template<
int _N,
typename _Scalar>
21 using Impl = TnImpl<_N, _Scalar>;
26 template<
typename NewScalar>
27 using PlainObject = Eigen::Matrix<NewScalar, _N, 1>;
47template<
typename _Derived>
57 SMOOTH_INHERIT_TYPEDEFS;
67 template<std::
size_t Idx>
73 template<std::
size_t Idx>
79 template<std::
size_t Idx>
85 template<std::
size_t Idx>
95 template<std::
size_t Idx>
99 static_cast<const _Derived &
>(*this).data() + std::get<Idx>(Impl::RepSizesPsum));
119 static constexpr bool is_mutable =
true;
121 using Impl = BundleImpl<typename liebase_info<_Gs>::Impl...>;
122 using Scalar = std::common_type_t<typename liebase_info<_Gs>::Scalar...>;
124 static_assert((std::is_same_v<Scalar, typename liebase_info<_Gs>::Scalar> && ...),
"Scalar types must be identical");
126 template<
typename NewScalar>
129 template<std::
size_t Idx>
130 using PartPlainObject =
151 template<
typename...
S>
152 requires(std::is_assignable_v<_Gs, S> && ...)
155 const auto tpl = std::forward_as_tuple(
gs...);
157#pragma GCC diagnostic push
158#pragma GCC diagnostic ignored "-Wunused-lambda-capture"
162#pragma GCC diagnostic pop
190 static constexpr bool is_mutable =
false;
204 SMOOTH_CONST_MAP_API();
Base class for Bundle lie groups.
typename liebase_info< _Derived >::template PartPlainObject< Idx > PartType
Part type.
static constexpr auto BundleSize
Number of elements in Bundle.
MapDispatch< PartType< Idx > > part()
Access part no Idx of Bundle.
static constexpr auto PartDof
Part degrees of freedom.
MapDispatch< const PartType< Idx > > part() const
Const access part no Idx of Bundle.
static constexpr auto PartStart
Part starting index (degrees of freedom).
Storage implementation of Bundle lie group.
Base class for Lie group types.
static constexpr bool is_mutable
True if underlying storage supports modification.
Eigen::Matrix< Scalar, Dim, Dim > Matrix
Lie group matrix type.
Memory mapping of internal Lie group types.
Type for which liebase_info is properly specified.
typename traits::man< M >::Scalar Scalar
Manifold scalar type.
typename traits::man< M >::PlainObject PlainObject
Manifold default type.
Type trait that maps a type to Lie group operations.