30#if GTSAM_ENABLE_BOOST_SERIALIZATION
31#include <boost/serialization/nvp.hpp>
36template <
int K,
class Derived =
void>
47template <
int K_,
class Derived>
49 std::conditional_t<std::is_void_v<Derived>,
50 ExtendedPose3<K_, void>, Derived>,
51 (K_ == Eigen::Dynamic) ? Eigen::Dynamic : 3 + 3 * K_,
52 (K_ == Eigen::Dynamic) ? Eigen::Dynamic : 3 + K_> {
54 static constexpr int K = K_;
55 using This = std::conditional_t<std::is_void_v<Derived>,
57 inline constexpr static int dimension =
58 (K == Eigen::Dynamic) ? Eigen::Dynamic : 3 + 3 * K;
59 inline constexpr static int matrixDim =
60 (K == Eigen::Dynamic) ? Eigen::Dynamic : 3 + K;
63 using TangentVector =
typename Base::TangentVector;
64 using Jacobian =
typename Base::Jacobian;
65 using ChartJacobian =
typename Base::ChartJacobian;
66 using ComponentJacobian =
67 std::conditional_t<dimension == Eigen::Dynamic,
71 using MatrixRep = Eigen::Matrix<double, matrixDim, matrixDim>;
73 using LieAlgebra = Eigen::Matrix<double, matrixDim, matrixDim>;
74 using Matrix3K = Eigen::Matrix<double, 3, K>;
76 static_assert(K == Eigen::Dynamic || K >= 1,
77 "ExtendedPose3<K>: K should be >= 1 or Eigen::Dynamic.");
84 using IsDynamic =
typename std::enable_if<K__ == Eigen::Dynamic, void>::type;
86 using IsFixed =
typename std::enable_if<K__ >= 1,
void>::type;
98 template <
int K__ = K_,
typename = IsFixed<K__>>
108 template <
int K__ = K_,
typename = IsDynamic<K__>>
136 template <
int FixedK = K,
typename = IsFixed<FixedK>,
typename... Vecs,
137 typename = std::enable_if_t<
138 sizeof...(Vecs) == FixedK &&
139 (std::is_constructible_v<Po
int3, Vecs> && ...)>>
163 size_t k()
const {
return static_cast<size_t>(
t_.cols()); }
183 Point3 x(
size_t i, ComponentJacobian H = {})
const;
208 void print(
const std::string& s =
"")
const;
228 template <
int K__ = K_,
typename = IsFixed<K__>>
239 template <
int K__ = K_,
typename = IsDynamic<K__>>
270 static This
Expmap(
const TangentVector& xi, ChartJacobian Hxi = {});
279 static TangentVector
Logmap(
const This& pose, ChartJacobian Hpose = {});
329 static This
Retract(
const TangentVector& xi, ChartJacobian Hxi = {});
338 static TangentVector
Local(
const This& pose, ChartJacobian Hpose = {});
372 friend std::ostream& operator<<(std::ostream& os,
const ExtendedPose3& p) {
373 os <<
"R: " << p.
R_ <<
"\n";
380 if constexpr (std::is_void_v<Derived>) {
388 if constexpr (std::is_void_v<Derived>) {
395 static size_t RuntimeK(
const TangentVector& xi);
396 static void ZeroJacobian(ChartJacobian H, Eigen::Index d);
399#if GTSAM_ENABLE_BOOST_SERIALIZATION
400 friend class boost::serialization::access;
401 template <
class Archive>
402 void serialize(Archive& ar,
const unsigned int ) {
403 ar& BOOST_SERIALIZATION_NVP(
R_);
404 ar& BOOST_SERIALIZATION_NVP(
t_);
413template <
int K,
class Derived>
416 ExtendedPose3<K, Derived>::matrixDim> {};
418template <
int K,
class Derived>
421 ExtendedPose3<K, Derived>::matrixDim> {};
Base class and basic functions for Matrix Lie groups.
Macros for Matrix constants to avoid excessive template instantiation.
Template implementations for ExtendedPose3<K, Derived>.
3D rotation represented as a rotation matrix or quaternion
Global functions in a separate testing namespace.
Definition chartTesting.h:28
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:38
ExtendedPose3< 2 > Se23
Convenience typedef for dynamic-k ExtendedPose3.
Definition ExtendedPose3.h:410
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
A CRTP helper class that implements matrix Lie group methods.
Definition MatrixLieGroup.h:51
Both LieGroupTraits and Testable.
Definition MatrixLieGroup.h:350
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:40
Lie group SE_k(3): semidirect product of SO(3) with k copies of R^3.
Definition ExtendedPose3.h:52
MatrixRep matrix() const
Homogeneous matrix representation.
Definition ExtendedPose3-inl.h:340
static Jacobian adjointMap(const TangentVector &xi)
Lie algebra adjoint map.
Definition ExtendedPose3-inl.h:256
size_t dim() const
Definition ExtendedPose3.h:166
ExtendedPose3 & operator=(const ExtendedPose3 &)=default
Copy assignment.
static LieAlgebra Hat(const TangentVector &xi)
Hat operator from tangent to Lie algebra.
Definition ExtendedPose3-inl.h:355
ExtendedPose3(const Rot3 &R, const Vecs &... xs)
Construct a fixed-size state from rotation and K 3-vectors.
Definition ExtendedPose3-inl.h:49
static This Expmap(const TangentVector &xi, ChartJacobian Hxi={})
Exponential map from tangent to group.
Definition ExtendedPose3-inl.h:152
ExtendedPose3(const Rot3 &R, const Matrix3K &x)
Construct from rotation and 3xk block.
Definition ExtendedPose3-inl.h:44
static This Identity()
Definition ExtendedPose3.h:229
Point3 x(size_t i, ComponentJacobian H={}) const
void print(const std::string &s="") const
Print this state.
Definition ExtendedPose3-inl.h:116
static TangentVector Logmap(const This &pose, ChartJacobian Hpose={})
Logarithm map from group to tangent.
Definition ExtendedPose3-inl.h:210
static Jacobian ExpmapDerivative(const TangentVector &xi)
Jacobian of Expmap.
Definition ExtendedPose3-inl.h:280
static This Identity(size_t k=0)
Identity element for dynamic-size K.
Definition ExtendedPose3.h:240
This operator*(const This &other) const
Group composition.
Definition ExtendedPose3-inl.h:135
ExtendedPose3(size_t k=0)
Construct a dynamic-size identity element.
Definition ExtendedPose3.h:109
Eigen::Matrix< double, matrixDim, matrixDim > MatrixRep
Homogeneous matrix representation in the group.
Definition ExtendedPose3.h:71
Rot3 R_
Definition ExtendedPose3.h:80
size_t k() const
Definition ExtendedPose3.h:163
static TangentVector Vee(const LieAlgebra &X)
Vee operator from Lie algebra to tangent.
Definition ExtendedPose3-inl.h:375
This inverse() const
Group inverse.
Definition ExtendedPose3-inl.h:127
bool equals(const ExtendedPose3 &other, double tol=1e-9) const
Equality check with tolerance.
Definition ExtendedPose3-inl.h:121
Matrix3K t_
Definition ExtendedPose3.h:81
ExtendedPose3()
Construct a fixed-size identity element.
Definition ExtendedPose3.h:99
Eigen::Matrix< double, matrixDim, matrixDim > LieAlgebra
Lie algebra matrix type used by Hat/Vee.
Definition ExtendedPose3.h:73
static Jacobian LogmapDerivative(const TangentVector &xi)
Jacobian of Logmap evaluated from tangent coordinates.
Definition ExtendedPose3-inl.h:288
const Rot3 & rotation(ComponentJacobian H={}) const
Rotation component.
Definition ExtendedPose3-inl.h:76
ExtendedPose3(const ExtendedPose3 &)=default
Copy constructor.
const Matrix3K & xMatrix() const
Access all x_i blocks.
Definition ExtendedPose3-inl.h:105
Matrix3K & xMatrix()
Mutable access to all x_i blocks.
Definition ExtendedPose3-inl.h:111
static size_t Dimension(size_t k)
Runtime manifold dimension helper.
Definition ExtendedPose3.h:160
static Jacobian LogmapDerivative(const This &pose)
Jacobian of Logmap evaluated at a group element.
Definition ExtendedPose3-inl.h:320
ExtendedPose3(const MatrixRep &T)
Construct from homogeneous matrix representation.
Definition ExtendedPose3-inl.h:58
Jacobian AdjointMap() const
Adjoint map.
Definition ExtendedPose3-inl.h:234
Chart operations at identity for LieGroup/Manifold compatibility.
Definition ExtendedPose3.h:321
static This Retract(const TangentVector &xi, ChartJacobian Hxi={})
Retract at identity.
Definition ExtendedPose3-inl.h:326
static TangentVector Local(const This &pose, ChartJacobian Hpose={})
Local coordinates at identity.
Definition ExtendedPose3-inl.h:333
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:65