18struct PinocchioLieGroup
22 using LieGroup = _LieGroup;
23 using Scalar =
typename LieGroup::Scalar;
24 static constexpr int Options = LieGroup::Options;
27 static_assert(std::is_base_of_v<pin::LieGroupBase<LieGroup>, LieGroup>,
28 "LieGroup template argument should be a subclass of "
29 "pinocchio::LieGroupBase.");
32 PinocchioLieGroup() {}
33 PinocchioLieGroup(
const LieGroup &lg) : lg_(lg) {}
34 PinocchioLieGroup(LieGroup &&lg) : lg_(std::move(lg)) {}
35 PinocchioLieGroup(
const PinocchioLieGroup &lg) =
default;
36 PinocchioLieGroup(PinocchioLieGroup &&lg) =
default;
38 template <
typename... Args>
39 PinocchioLieGroup(Args &&...args) : lg_(std::forward<Args>(args)...) {}
41 operator LieGroup() {
return lg_; }
43 inline int nx()
const {
return lg_.nq(); }
44 inline int ndx()
const {
return lg_.nv(); }
49 VectorRef out)
const {
50 lg_.integrate(x, v, out);
54 VectorRef vout)
const {
55 lg_.difference(x0, x1, vout);
58 void Jintegrate_impl(
const ConstVectorRef &x,
const ConstVectorRef &v,
59 MatrixRef Jout,
int arg)
const {
62 lg_.dIntegrate_dq(x, v, Jout);
65 lg_.dIntegrate_dv(x, v, Jout);
71 MatrixRef Jout,
int arg)
const {
72 lg_.dIntegrateTransport(x, v, Jout, pin::ArgumentPosition(arg));
75 void Jdifference_impl(
const ConstVectorRef &x0,
const ConstVectorRef &x1,
76 MatrixRef Jout,
int arg)
const {
79 lg_.dDifference(x0, x1, Jout, pin::ARG0);
82 lg_.dDifference(x0, x1, Jout, pin::ARG1);
87 virtual void interpolate_impl(
const ConstVectorRef &x0,
88 const ConstVectorRef &x1,
const Scalar &u,
89 VectorRef out)
const {
90 lg_.interpolate(x0, x1, u, out);
93 VectorXs
neutral()
const {
return lg_.neutral(); }
95 VectorXs
rand()
const {
return lg_.random(); }
99 return lg_.isNormalized(x);