7#include <pinocchio/multibody/liegroup/liegroup-base.hpp>
8#include <pinocchio/algorithm/joint-configuration.hpp>
12namespace pin = pinocchio;
21template <
typename _LieGroup>
26 using Scalar =
typename LieGroup::Scalar;
30 "LieGroup template argument should be a subclass of "
31 "pinocchio::LieGroupBase.");
38 :
lg_(std::move(lg)) {}
42 template <
typename... Args>
44 :
lg_(std::forward<Args>(args)...) {}
48 inline int nx()
const {
return lg_.nq(); }
49 inline int ndx()
const {
return lg_.nv(); }
54 return lg_.isNormalized(x);
61 VectorRef out)
const {
62 lg_.integrate(x, v, out);
66 VectorRef vout)
const {
67 lg_.difference(x0, x1, vout);
71 MatrixRef Jout,
int arg)
const {
74 lg_.dIntegrate_dq(x, v, Jout);
77 lg_.dIntegrate_dv(x, v, Jout);
83 const ConstVectorRef &v, MatrixRef Jout,
85 lg_.dIntegrateTransport(x, v, Jout, pin::ArgumentPosition(arg));
89 MatrixRef Jout,
int arg)
const {
92 lg_.dDifference(x0, x1, Jout, pin::ARG0);
95 lg_.dDifference(x0, x1, Jout, pin::ARG1);
101 const ConstVectorRef &x1,
const Scalar &u,
102 VectorRef out)
const {
103 lg_.interpolate(x0, x1, u, out);
111template <
int D,
typename Scalar>
114template <
int D,
typename Scalar>
PinocchioLieGroup< pin::SpecialEuclideanOperationTpl< D, Scalar > > SETpl
std::is_base_of< pin::LieGroupBase< G >, G > is_pinocchio_lie_group
PinocchioLieGroup< pin::SpecialOrthogonalOperationTpl< D, Scalar > > SOTpl
Base class for manifolds, to use in cost funcs, solvers...
Wrap a Pinocchio Lie group into a ManifoldAbstractTpl object.
int nx() const
Get manifold representation dimension.
int ndx() const
Get manifold tangent space dimension.
typename LieGroup::Scalar Scalar
void Jintegrate_impl(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
PinocchioLieGroup(LieGroup &&lg)
ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
virtual void interpolate_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, const Scalar &u, VectorRef out) const
PinocchioLieGroup(PinocchioLieGroup &&lg)=default
PinocchioLieGroup(Args &&...args)
ManifoldAbstractTpl< Scalar > Base
void integrate_impl(const ConstVectorRef &x, const ConstVectorRef &v, VectorRef out) const
Perform the manifold integration operation.
virtual void neutral_impl(VectorRef out) const
void Jdifference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, MatrixRef Jout, int arg) const
virtual void rand_impl(VectorRef out) const
void JintegrateTransport_impl(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
PinocchioLieGroup(const PinocchioLieGroup &lg)=default
PinocchioLieGroup(const LieGroup &lg)
bool isNormalized(const ConstVectorRef &x) const
Check if the input vector x is a viable element of the manifold.
void difference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, VectorRef vout) const
Implementation of the manifold retraction operation.