6#include <Eigen/Geometry>
8#include "detail/macro.hpp"
9#include "detail/se_k_3.hpp"
10#include "detail/utils.hpp"
11#include "lie_group_base.hpp"
64template<
typename _Derived>
74 SMOOTH_INHERIT_TYPEDEFS;
79 static constexpr auto K = Impl::K;
104 Eigen::Map<Eigen::Vector3<Scalar>>
r3()
107 return Eigen::Map<Eigen::Vector3<Scalar>>(
static_cast<_Derived &
>(*this).data() + 3 *
Ksel);
115 Eigen::Map<Eigen::Vector3<Scalar>>
r3(
int k)
119 return Eigen::Map<Eigen::Vector3<Scalar>>(
static_cast<_Derived &
>(*this).data() + 3 *
k);
128 Eigen::Map<const Eigen::Vector3<Scalar>>
r3()
const
131 return Eigen::Map<const Eigen::Vector3<Scalar>>(
static_cast<const _Derived &
>(*this).data() + 3 *
Ksel);
139 Eigen::Map<const Eigen::Vector3<Scalar>>
r3(
int k)
const
142 return Eigen::Map<const Eigen::Vector3<Scalar>>(
static_cast<const _Derived &
>(*this).data() + 3 *
k);
147template<
typename _Scalar,
int K>
152template<
typename _Scalar,
int K>
155 static constexpr bool is_mutable =
true;
157 using Impl = SE_K_3Impl<_Scalar, K>;
160 template<
typename NewScalar>
175template<
typename _Scalar,
int K>
191 requires(
sizeof...(r3s) ==
K)
193 const auto tpl = std::forward_as_tuple(
r3s...);
196#pragma GCC diagnostic push
197#pragma GCC diagnostic ignored "-Wunused-lambda-capture"
201#pragma GCC diagnostic pop
207template<
typename _Scalar,
int _K>
217template<
typename _Scalar,
int _K>
226template<
typename _Scalar,
int _K>
229 static constexpr bool is_mutable =
false;
238template<
typename _Scalar,
int _K>
243 SMOOTH_CONST_MAP_API();
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.
Base class for SE_k(3) Lie group types.
Eigen::Map< const Eigen::Vector3< Scalar > > r3() const
Const access R3 parts.
static constexpr auto K
Number of R3 variables.
Eigen::Map< Eigen::Vector3< Scalar > > r3(int k)
Access R3 parts.
Map< SO3< Scalar > > so3()
Access SO(3) part.
Eigen::Map< Eigen::Vector3< Scalar > > r3()
Access R3 parts.
Eigen::Map< const Eigen::Vector3< Scalar > > r3(int k) const
Const access R3 parts.
Map< const SO3< Scalar > > so3() const
Const access SO(3) part.
Storage implementation of Lie group.
Base::so3()
Construct from SO3 and translation.
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.