7#include <pinocchio/multibody/liegroup/liegroup-base.hpp>
8#include <pinocchio/algorithm/joint-configuration.hpp>
12namespace pin = pinocchio;
18 std::is_base_of_v<pin::LieGroupBase<G>, G>;
22template <
typename G, std::enable_if_t<is_pinocchio_lie_group<G>> * =
nullptr>
26 using Scalar =
typename LieGroup::Scalar;
40 :
Base(lg.nq(), lg.nv())
45 template <
typename... Args>
48 ,
lg_(std::forward<Args>(args)...) {
58 return lg_.isNormalized(x);
65 VectorRef out)
const {
66 lg_.integrate(x, v, out);
70 VectorRef vout)
const {
71 lg_.difference(x0, x1, vout);
75 MatrixRef Jout,
int arg)
const {
78 lg_.dIntegrate_dq(x, v, Jout);
81 lg_.dIntegrate_dv(x, v, Jout);
87 const ConstVectorRef &v, MatrixRef Jout,
89 lg_.dIntegrateTransport(x, v, Jout, pin::ArgumentPosition(arg));
93 MatrixRef Jout,
int arg)
const {
96 lg_.dDifference(x0, x1, Jout, pin::ARG0);
99 lg_.dDifference(x0, x1, Jout, pin::ARG1);
105 const ConstVectorRef &x1,
const Scalar &u,
106 VectorRef out)
const {
107 lg_.interpolate(x0, x1, u, out);
117template <
int D,
typename Scalar>
120template <
int D,
typename Scalar>
PinocchioLieGroup< pin::SpecialEuclideanOperationTpl< D, Scalar > > SETpl
constexpr bool is_pinocchio_lie_group
PinocchioLieGroup(const G &) -> PinocchioLieGroup< G >
PinocchioLieGroup< pin::SpecialOrthogonalOperationTpl< D, Scalar > > SOTpl
ManifoldAbstractTpl(int nx, int ndx)
Wrap a Pinocchio Lie group into a ManifoldAbstractTpl object.
void JintegrateTransport_impl(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
void integrate_impl(const ConstVectorRef &x, const ConstVectorRef &v, VectorRef out) const
Perform the manifold integration operation.
void Jintegrate_impl(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
PinocchioLieGroup(Args &&...args)
ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
PinocchioLieGroup(const PinocchioLieGroup &lg)=default
bool isNormalized(const ConstVectorRef &x) const
Check if the input vector x is a viable element of the manifold.
virtual void rand_impl(VectorRef out) const
virtual void interpolate_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, const Scalar &u, VectorRef out) const
PinocchioLieGroup(PinocchioLieGroup &&lg)=default
virtual void neutral_impl(VectorRef out) const
ManifoldAbstractTpl< Scalar > Base
void Jdifference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, MatrixRef Jout, int arg) const
void difference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, VectorRef vout) const
Implementation of the manifold retraction operation.
typename LieGroup::Scalar Scalar
PinocchioLieGroup(const LieGroup &lg)