aligator
0.19.0
A versatile and efficient C++ library for real-time constrained trajectory optimization.
Toggle main menu visibility
Loading...
Searching...
No Matches
pinocchio-groups.hpp
Go to the documentation of this file.
1
3
#pragma once
4
5
#include "
aligator/core/manifold-base.hpp
"
6
7
#include <pinocchio/multibody/liegroup/liegroup-base.hpp>
8
#include <pinocchio/algorithm/joint-configuration.hpp>
9
10
namespace
aligator
{
11
12
namespace
pin = pinocchio;
13
16
template
<
typename
G>
17
inline
constexpr
bool
is_pinocchio_lie_group_v
=
18
is_tpl_base_of_v<pin::LieGroupBase, G>
;
19
22
template
<
typename
LieGroup_>
23
struct
PinocchioLieGroup
:
ManifoldAbstractTpl
<typename LieGroup_::Scalar> {
24
public
:
25
using
LieGroup
= LieGroup_;
26
static_assert
(
is_pinocchio_lie_group_v<LieGroup>
);
27
using
Scalar
=
typename
LieGroup::Scalar;
28
using
Base
=
ManifoldAbstractTpl<Scalar>
;
29
using
Base::ndx
;
30
using
Base::nx
;
31
ALIGATOR_DYNAMIC_TYPEDEFS
(
Scalar
);
32
33
LieGroup
lg_
;
34
35
PinocchioLieGroup
()
36
:
Base
(0, 0) {
37
this->
nx_
=
lg_
.nq();
38
this->
ndx_
=
lg_
.nv();
39
}
40
PinocchioLieGroup
(
const
LieGroup
&lg)
41
:
Base
(lg.nq(), lg.nv())
42
,
lg_
(lg) {}
43
PinocchioLieGroup
(
const
PinocchioLieGroup
&lg) =
default
;
44
PinocchioLieGroup
(
PinocchioLieGroup
&&lg) =
default
;
45
46
template
<
typename
... Args>
47
PinocchioLieGroup
(Args &&...args)
48
:
Base
(0, 0)
49
,
lg_
(std::forward<Args>(args)...) {
50
this->
nx_
=
lg_
.nq();
51
this->
ndx_
=
lg_
.nv();
52
}
53
54
operator
LieGroup
()
const
{
return
lg_
; }
55
LieGroup
lieGroup
()
const
{
return
lg_
; }
56
57
bool
isNormalized
(
const
ConstVectorRef &x)
const
{
58
if
(x.size() <
nx
())
59
return
false
;
60
return
lg_
.isNormalized(x);
61
}
62
63
protected
:
65
66
void
integrate_impl
(
const
ConstVectorRef &x,
const
ConstVectorRef &v,
67
VectorRef out)
const
{
68
lg_
.integrate(x, v, out);
69
}
70
71
void
difference_impl
(
const
ConstVectorRef &x0,
const
ConstVectorRef &x1,
72
VectorRef vout)
const
{
73
lg_
.difference(x0, x1, vout);
74
}
75
76
void
Jintegrate_impl
(
const
ConstVectorRef &x,
const
ConstVectorRef &v,
77
MatrixRef Jout,
int
arg)
const
{
78
switch
(arg) {
79
case
0:
80
lg_
.dIntegrate_dq(x, v, Jout);
81
break
;
82
case
1:
83
lg_
.dIntegrate_dv(x, v, Jout);
84
break
;
85
}
86
}
87
88
void
JintegrateTransport_impl
(
const
ConstVectorRef &x,
89
const
ConstVectorRef &v, MatrixRef Jout,
90
int
arg)
const
{
91
lg_
.dIntegrateTransport(x, v, Jout, pin::ArgumentPosition(arg));
92
}
93
94
void
Jdifference_impl
(
const
ConstVectorRef &x0,
const
ConstVectorRef &x1,
95
MatrixRef Jout,
int
arg)
const
{
96
switch
(arg) {
97
case
0:
98
lg_
.dDifference(x0, x1, Jout, pin::ARG0);
99
break
;
100
case
1:
101
lg_
.dDifference(x0, x1, Jout, pin::ARG1);
102
break
;
103
}
104
}
105
106
virtual
void
interpolate_impl
(
const
ConstVectorRef &x0,
107
const
ConstVectorRef &x1,
const
Scalar
&u,
108
VectorRef out)
const
{
109
lg_
.interpolate(x0, x1, u, out);
110
}
111
112
virtual
void
neutral_impl
(VectorRef out)
const
{ out =
lg_
.neutral(); }
113
114
virtual
void
rand_impl
(VectorRef out)
const
{ out =
lg_
.random(); }
115
};
116
117
template
<
typename
G>
PinocchioLieGroup
(
const
G &) ->
PinocchioLieGroup<G>
;
118
119
template
<
int
D,
typename
Scalar>
120
using
SETpl
=
PinocchioLieGroup<pin::SpecialEuclideanOperationTpl<D, Scalar>
>;
121
122
template
<
int
D,
typename
Scalar>
123
using
SOTpl
=
PinocchioLieGroup<pin::SpecialOrthogonalOperationTpl<D, Scalar>
>;
124
125
}
// namespace aligator
manifold-base.hpp
aligator
Main package namespace.
Definition
action-model-wrap.hpp:14
aligator::is_pinocchio_lie_group_v
constexpr bool is_pinocchio_lie_group_v
Definition
pinocchio-groups.hpp:17
aligator::SETpl
PinocchioLieGroup< pin::SpecialEuclideanOperationTpl< D, Scalar > > SETpl
Definition
pinocchio-groups.hpp:120
aligator::is_tpl_base_of_v
constexpr bool is_tpl_base_of_v
Definition
math.hpp:69
aligator::PinocchioLieGroup
PinocchioLieGroup(const G &) -> PinocchioLieGroup< G >
aligator::SOTpl
PinocchioLieGroup< pin::SpecialOrthogonalOperationTpl< D, Scalar > > SOTpl
Definition
pinocchio-groups.hpp:123
aligator::ManifoldAbstractTpl< LieGroup_::Scalar >::ManifoldAbstractTpl
ManifoldAbstractTpl(int nx, int ndx)
Definition
manifold-base.hpp:18
aligator::ManifoldAbstractTpl< Scalar >::nx
int nx() const
Definition
manifold-base.hpp:25
aligator::ManifoldAbstractTpl::nx_
int nx_
Definition
manifold-base.hpp:123
aligator::ManifoldAbstractTpl< Scalar >::ndx
int ndx() const
Definition
manifold-base.hpp:27
aligator::ManifoldAbstractTpl::ndx_
int ndx_
Definition
manifold-base.hpp:124
aligator::PinocchioLieGroup
Wrap a Pinocchio Lie group into a ManifoldAbstractTpl object.
Definition
pinocchio-groups.hpp:23
aligator::PinocchioLieGroup::LieGroup
LieGroup_ LieGroup
Definition
pinocchio-groups.hpp:25
aligator::PinocchioLieGroup::PinocchioLieGroup
PinocchioLieGroup()
Definition
pinocchio-groups.hpp:35
aligator::PinocchioLieGroup::ALIGATOR_DYNAMIC_TYPEDEFS
ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
aligator::PinocchioLieGroup::PinocchioLieGroup
PinocchioLieGroup(PinocchioLieGroup &&lg)=default
aligator::PinocchioLieGroup< pin::SpecialEuclideanOperationTpl< D, Scalar > >::lg_
LieGroup lg_
Definition
pinocchio-groups.hpp:33
aligator::PinocchioLieGroup::lieGroup
LieGroup lieGroup() const
Definition
pinocchio-groups.hpp:55
aligator::PinocchioLieGroup::Jintegrate_impl
void Jintegrate_impl(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
Definition
pinocchio-groups.hpp:76
aligator::PinocchioLieGroup::PinocchioLieGroup
PinocchioLieGroup(Args &&...args)
Definition
pinocchio-groups.hpp:47
aligator::PinocchioLieGroup::rand_impl
virtual void rand_impl(VectorRef out) const
Definition
pinocchio-groups.hpp:114
aligator::PinocchioLieGroup::Base
ManifoldAbstractTpl< Scalar > Base
Definition
pinocchio-groups.hpp:28
aligator::PinocchioLieGroup< pin::SpecialEuclideanOperationTpl< D, Scalar > >::nx
int nx() const
aligator::PinocchioLieGroup::difference_impl
void difference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, VectorRef vout) const
Implementation of the manifold retraction operation.
Definition
pinocchio-groups.hpp:71
aligator::PinocchioLieGroup::PinocchioLieGroup
PinocchioLieGroup(const PinocchioLieGroup &lg)=default
aligator::PinocchioLieGroup::Scalar
typename LieGroup::Scalar Scalar
Definition
pinocchio-groups.hpp:27
aligator::PinocchioLieGroup::JintegrateTransport_impl
void JintegrateTransport_impl(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
Definition
pinocchio-groups.hpp:88
aligator::PinocchioLieGroup::integrate_impl
void integrate_impl(const ConstVectorRef &x, const ConstVectorRef &v, VectorRef out) const
Perform the manifold integration operation.
Definition
pinocchio-groups.hpp:66
aligator::PinocchioLieGroup::neutral_impl
virtual void neutral_impl(VectorRef out) const
Definition
pinocchio-groups.hpp:112
aligator::PinocchioLieGroup::PinocchioLieGroup
PinocchioLieGroup(const LieGroup &lg)
Definition
pinocchio-groups.hpp:40
aligator::PinocchioLieGroup::Jdifference_impl
void Jdifference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, MatrixRef Jout, int arg) const
Definition
pinocchio-groups.hpp:94
aligator::PinocchioLieGroup::isNormalized
bool isNormalized(const ConstVectorRef &x) const
Check if the input vector x is a viable element of the manifold.
Definition
pinocchio-groups.hpp:57
aligator::PinocchioLieGroup::interpolate_impl
virtual void interpolate_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, const Scalar &u, VectorRef out) const
Definition
pinocchio-groups.hpp:106
include
aligator
modelling
spaces
pinocchio-groups.hpp
Generated by
1.17.0