aligator  0.6.1
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
centroidal-momentum-derivative.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "./fwd.hpp"
5
6#include <pinocchio/multibody/model.hpp>
7#include <pinocchio/algorithm/center-of-mass.hpp>
8
9namespace aligator {
10
11template <typename Scalar> struct CentroidalMomentumDerivativeDataTpl;
12
18template <typename _Scalar>
20 frame_api {
21public:
22 using Scalar = _Scalar;
24 using Base = StageFunctionTpl<Scalar>;
25 using BaseData = typename Base::Data;
26 using Model = pinocchio::ModelTpl<Scalar>;
27 using SE3 = pinocchio::SE3Tpl<Scalar>;
28 using Data = CentroidalMomentumDerivativeDataTpl<Scalar>;
29
31 double mass_;
32 Vector3s gravity_;
33 std::vector<bool> contact_states_;
34 std::vector<pinocchio::FrameIndex> contact_ids_;
36
38 const int ndx, const Model &model, const Vector3s &gravity,
39 const std::vector<bool> &contact_states,
40 const std::vector<pinocchio::FrameIndex> &contact_ids,
41 const int force_size)
42 : Base(ndx, (int)contact_states.size() * force_size + model.nv - 6, 6),
43 pin_model_(model), gravity_(gravity), contact_states_(contact_states),
44 contact_ids_(contact_ids), force_size_(force_size) {
45 mass_ = pinocchio::computeTotalMass(model);
46 if (contact_ids_.size() != contact_states_.size()) {
48 fmt::format("contact_ids and contact_states should have same size: "
49 "now ({} and {}).",
50 contact_ids_.size(), contact_states_.size()));
51 }
52 }
53
54 void evaluate(const ConstVectorRef &x, const ConstVectorRef &u,
55 const ConstVectorRef &, BaseData &data) const;
56
57 void computeJacobians(const ConstVectorRef &x, const ConstVectorRef &u,
58 const ConstVectorRef &, BaseData &data) const;
59
60 shared_ptr<BaseData> createData() const {
61 return allocate_shared_eigen_aligned<Data>(this);
62 }
63};
64
65template <typename Scalar>
67 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
68 using Base = StageFunctionDataTpl<Scalar>;
69 using PinData = pinocchio::DataTpl<Scalar>;
70 using Matrix3Xs = typename math_types<Scalar>::Matrix3Xs;
71 using Matrix6Xs = typename math_types<Scalar>::Matrix6Xs;
72 using Matrix3s = Eigen::Matrix<Scalar, 3, 3>;
73
79
81 const CentroidalMomentumDerivativeResidualTpl<Scalar> *model);
82};
83
84} // namespace aligator
85
86#include "aligator/modelling/multibody/centroidal-momentum-derivative.hxx"
87
88#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
89#include "./centroidal-momentum-derivative.txx"
90#endif
#define ALIGATOR_DOMAIN_ERROR(msg)
Base definitions for ternary functions.
Main package namespace.
CentroidalMomentumDerivativeDataTpl(const CentroidalMomentumDerivativeResidualTpl< Scalar > *model)
This residual returns the derivative of centroidal momentum for a kinodynamics model.
void computeJacobians(const ConstVectorRef &x, const ConstVectorRef &u, const ConstVectorRef &, BaseData &data) const
CentroidalMomentumDerivativeResidualTpl(const int ndx, const Model &model, const Vector3s &gravity, const std::vector< bool > &contact_states, const std::vector< pinocchio::FrameIndex > &contact_ids, const int force_size)
shared_ptr< BaseData > createData() const
Instantiate a Data object.
void evaluate(const ConstVectorRef &x, const ConstVectorRef &u, const ConstVectorRef &, BaseData &data) const
Base struct for function data.
Class representing ternary functions .
StageFunctionDataTpl< Scalar > Data