25 inline int nx()
const {
return nx_; }
41 [[nodiscard]] VectorXs
rand()
const {
52 virtual bool isNormalized(
const ConstVectorRef & )
const {
return true; }
62 void integrate(
const ConstVectorRef &x,
const ConstVectorRef &v,
66 void Jintegrate(
const ConstVectorRef &x,
const ConstVectorRef &v,
67 MatrixRef Jout,
int arg)
const;
72 MatrixRef Jout,
int arg)
const {
73 assert(Jout.rows() == v.size());
78 void difference(
const ConstVectorRef &x0,
const ConstVectorRef &x1,
82 void Jdifference(
const ConstVectorRef &x0,
const ConstVectorRef &x1,
83 MatrixRef Jout,
int arg)
const;
85 void interpolate(
const ConstVectorRef &x0,
const ConstVectorRef &x1,
86 const Scalar &u, VectorRef out)
const;
94 [[nodiscard]] VectorXs
integrate(
const ConstVectorRef &x,
95 const ConstVectorRef &v)
const {
105 const ConstVectorRef &x1)
const {
113 const ConstVectorRef &x1,
128 VectorRef out)
const = 0;
131 MatrixRef Jout,
int arg)
const = 0;
134 const ConstVectorRef &v, MatrixRef Jout,
139 const ConstVectorRef &x1,
140 VectorRef out)
const = 0;
143 const ConstVectorRef &x1, MatrixRef Jout,
148 const ConstVectorRef &x1,
const Scalar &u,
149 VectorRef out)
const {
155 assert(out.size() ==
nx());
160 assert(out.size() ==
nx());
167#include "aligator/core/manifold-base.hxx"
VectorSpaceTpl< Scalar, Eigen::Dynamic > TangentSpaceType
virtual void Jdifference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, MatrixRef Jout, int arg) const =0
VectorXs rand() const
Sample a random point on the manifold.
ManifoldAbstractTpl(int nx, int ndx)
void neutral(VectorRef out) const
Get the neutral element from the manifold (if this makes sense).
ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
Scalar type.
void difference(const ConstVectorRef &x0, const ConstVectorRef &x1, VectorRef out) const
Manifold difference/retraction operation .
virtual void JintegrateTransport_impl(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const =0
void Jintegrate(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
Jacobian of the integation operation.
virtual void rand_impl(VectorRef out) const
void interpolate(const ConstVectorRef &x0, const ConstVectorRef &x1, const Scalar &u, VectorRef out) const
void rand(VectorRef out) const
Sample a random point on the manifold.
virtual ~ManifoldAbstractTpl()=default
virtual void interpolate_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, const Scalar &u, VectorRef out) const
Interpolation operation.
void integrate(const ConstVectorRef &x, const ConstVectorRef &v, VectorRef out) const
Manifold integration operation .
VectorXs neutral() const
Get the neutral element from the manifold (if this makes sense).
VectorXs integrate(const ConstVectorRef &x, const ConstVectorRef &v) const
Manifold integration operation .
void JintegrateTransport(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
Perform the parallel transport operation.
VectorXs interpolate(const ConstVectorRef &x0, const ConstVectorRef &x1, const Scalar &u) const
Interpolation operation.
TangentSpaceType tangentSpace() const
Return an object representing the tangent space as a manifold.
virtual void difference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, VectorRef out) const =0
Implementation of the manifold retraction operation.
virtual void integrate_impl(const ConstVectorRef &x, const ConstVectorRef &v, VectorRef out) const =0
Perform the manifold integration operation.
void Jdifference(const ConstVectorRef &x0, const ConstVectorRef &x1, MatrixRef Jout, int arg) const
Jacobian of the retraction operation.
virtual void Jintegrate_impl(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const =0
virtual void neutral_impl(VectorRef out) const
VectorXs difference(const ConstVectorRef &x0, const ConstVectorRef &x1) const
Manifold difference/retraction operation .
virtual bool isNormalized(const ConstVectorRef &) const
Check if the input vector x is a viable element of the manifold.
Standard Euclidean vector space.