aligator  0.14.0
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
 
Loading...
Searching...
No Matches
multibody.hpp
Go to the documentation of this file.
1
2#pragma once
3
4#include <pinocchio/multibody/model.hpp>
5#include <pinocchio/algorithm/joint-configuration.hpp>
6
8
9namespace aligator {
10
16template <typename _Scalar>
18public:
19 using Scalar = _Scalar;
22 using ModelType = pinocchio::ModelTpl<Scalar>;
24
26 : model_(model) {};
31
32 const ModelType &getModel() const { return model_; }
33
34 bool isNormalized(const ConstVectorRef &x) const {
35 return pinocchio::isNormalized(model_, x);
36 }
37
38 inline int nx() const { return model_.nq; }
39 inline int ndx() const { return model_.nv; }
40
41protected:
43
46
47 void integrate_impl(const ConstVectorRef &x, const ConstVectorRef &v,
48 VectorRef xout) const {
49 pinocchio::integrate(model_, x, v, xout);
50 }
51
52 void Jintegrate_impl(const ConstVectorRef &x, const ConstVectorRef &v,
53 MatrixRef Jout, int arg) const {
54 switch (arg) {
55 case 0:
56 pinocchio::dIntegrate(model_, x, v, Jout, pinocchio::ARG0);
57 break;
58 case 1:
59 pinocchio::dIntegrate(model_, x, v, Jout, pinocchio::ARG1);
60 break;
61 }
62 }
63
64 void JintegrateTransport_impl(const ConstVectorRef &x,
65 const ConstVectorRef &v, MatrixRef Jout,
66 int arg) const {
67 switch (arg) {
68 case 0:
69 pinocchio::dIntegrateTransport(model_, x, v, Jout, pinocchio::ARG0);
70 break;
71 case 1:
72 pinocchio::dIntegrateTransport(model_, x, v, Jout, pinocchio::ARG1);
73 break;
74 default:
75 break;
76 }
77 }
78
79 void difference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1,
80 VectorRef vout) const {
81 pinocchio::difference(model_, x0, x1, vout);
82 }
83
84 void Jdifference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1,
85 MatrixRef Jout, int arg) const {
86 switch (arg) {
87 case 0:
88 pinocchio::dDifference(model_, x0, x1, Jout, pinocchio::ARG0);
89 break;
90 case 1:
91 pinocchio::dDifference(model_, x0, x1, Jout, pinocchio::ARG1);
92 break;
93 }
94 }
95
96 void interpolate_impl(const ConstVectorRef &x0, const ConstVectorRef &x1,
97 const Scalar &u, VectorRef out) const {
98 pinocchio::interpolate(model_, x0, x1, u, out);
99 }
100
101 void neutral_impl(VectorRef out) const { pinocchio::neutral(model_, out); }
102
103 void rand_impl(VectorRef out) const {
104 pinocchio::randomConfiguration(model_, model_.lowerPositionLimit,
105 model_.upperPositionLimit, out);
106 }
107
109};
110
117template <typename Scalar>
131
132} // namespace aligator
Main package namespace.
Base class for manifolds, to use in cost funcs, solvers...
Multibody configuration group , defined using the Pinocchio library.
Definition multibody.hpp:17
MultibodyConfiguration(const MultibodyConfiguration &)=default
void Jintegrate_impl(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
Definition multibody.hpp:52
int nx() const
Get manifold representation dimension.
Definition multibody.hpp:38
void difference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, VectorRef vout) const
Implementation of the manifold retraction operation.
Definition multibody.hpp:79
MultibodyConfiguration< Scalar > Self
Definition multibody.hpp:21
int ndx() const
Get manifold tangent space dimension.
Definition multibody.hpp:39
void Jdifference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, MatrixRef Jout, int arg) const
Definition multibody.hpp:84
MultibodyConfiguration & operator=(MultibodyConfiguration &&)=default
const ModelType & getModel() const
Definition multibody.hpp:32
void interpolate_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, const Scalar &u, VectorRef out) const
Interpolation operation.
Definition multibody.hpp:96
void neutral_impl(VectorRef out) const
void integrate_impl(const ConstVectorRef &x, const ConstVectorRef &v, VectorRef xout) const
Perform the manifold integration operation.
Definition multibody.hpp:47
MultibodyConfiguration & operator=(const MultibodyConfiguration &)=default
MultibodyConfiguration(const ModelType &model)
Definition multibody.hpp:25
ManifoldAbstractTpl< Scalar > Base
Definition multibody.hpp:23
pinocchio::ModelTpl< Scalar > ModelType
Definition multibody.hpp:22
bool isNormalized(const ConstVectorRef &x) const
Check if the input vector x is a viable element of the manifold.
Definition multibody.hpp:34
void JintegrateTransport_impl(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
Definition multibody.hpp:64
MultibodyConfiguration(MultibodyConfiguration &&)=default
void rand_impl(VectorRef out) const
MultibodyPhaseSpace(const ModelType &model)
typename ConfigSpace::ModelType ModelType
const ModelType & getModel() const
MultibodyConfiguration< Scalar > ConfigSpace
MultibodyPhaseSpace(MultibodyPhaseSpace &&)=default
MultibodyPhaseSpace & operator=(const MultibodyPhaseSpace &)=default
MultibodyPhaseSpace(const MultibodyPhaseSpace &)=default
MultibodyPhaseSpace & operator=(MultibodyPhaseSpace &&)=default