aligator  0.14.0
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
multibody-friction-cone.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "fwd.hpp"
6
7#include <pinocchio/algorithm/proximal.hpp>
8
9namespace aligator {
10
11template <typename Scalar> struct MultibodyFrictionConeDataTpl;
12
17
18template <typename _Scalar>
20public:
21 using Scalar = _Scalar;
24 using BaseData = typename Base::Data;
25 using Model = pinocchio::ModelTpl<Scalar>;
26 using SE3 = pinocchio::SE3Tpl<Scalar>;
28 using RigidConstraintModelVector = PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(
29 pinocchio::RigidConstraintModel);
31 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(pinocchio::RigidConstraintData);
32 using ProxSettings = pinocchio::ProximalSettingsTpl<Scalar>;
33
38 double mu_;
40
42 const int ndx, const Model &model, const MatrixXs &actuation,
43 const RigidConstraintModelVector &constraint_models,
44 const ProxSettings &prox_settings, const std::string &contact_name,
45 const double mu)
46 : Base(ndx, (int)actuation.cols(), 2)
47 , pin_model_(model)
48 , actuation_matrix_(actuation)
49 , constraint_models_(constraint_models)
50 , prox_settings_(prox_settings)
51 , mu_(mu) {
52 if (model.nv != actuation.rows()) {
53 ALIGATOR_DOMAIN_ERROR(
54 fmt::format("actuation matrix should have number of rows = pinocchio "
55 "model nv ({} and {}).",
56 actuation.rows(), model.nv));
57 }
58 contact_id_ = -1;
59 for (std::size_t i = 0; i < constraint_models.size(); i++) {
60 if (constraint_models[i].name == contact_name) {
61 contact_id_ = (int)i;
62 }
63 }
64 if (contact_id_ == -1) {
66 "Contact name is not included in constraint models");
67 }
68 }
69
70 void evaluate(const ConstVectorRef &x, const ConstVectorRef &u,
71 BaseData &data) const;
72
73 void computeJacobians(const ConstVectorRef &, const ConstVectorRef &,
74 BaseData &data) const;
75
76 shared_ptr<BaseData> createData() const {
77 return std::make_shared<Data>(this);
78 }
79};
80
81template <typename Scalar>
83 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
85 using PinData = pinocchio::DataTpl<Scalar>;
89 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(pinocchio::RigidConstraintData);
90
95 Eigen::Matrix<Scalar, 1, 3> dcone_df_;
96
98 pinocchio::ProximalSettingsTpl<Scalar> settings;
99
102};
103
104} // namespace aligator
105
106#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
107#include "aligator/modelling/multibody/multibody-friction-cone.txx"
108#endif
#define ALIGATOR_RUNTIME_ERROR(...)
Definition exceptions.hpp:7
Base definitions for ternary functions.
Main package namespace.
MultibodyFrictionConeDataTpl(const MultibodyFrictionConeResidualTpl< Scalar > *model)
typename math_types< Scalar >::MatrixXs MatrixXs
typename math_types< Scalar >::VectorXs VectorXs
pinocchio::ProximalSettingsTpl< Scalar > settings
PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(pinocchio::RigidConstraintData) RigidConstraintDataVector
This residual returns the derivative of centroidal momentum for a kinodynamics model.
MultibodyFrictionConeResidualTpl(const int ndx, const Model &model, const MatrixXs &actuation, const RigidConstraintModelVector &constraint_models, const ProxSettings &prox_settings, const std::string &contact_name, const double mu)
PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(pinocchio::RigidConstraintData) RigidConstraintDataVector
void evaluate(const ConstVectorRef &x, const ConstVectorRef &u, BaseData &data) const
shared_ptr< BaseData > createData() const
Instantiate a Data object.
pinocchio::ProximalSettingsTpl< Scalar > ProxSettings
void computeJacobians(const ConstVectorRef &, const ConstVectorRef &, BaseData &data) const
PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR( pinocchio::RigidConstraintModel) RigidConstraintModelVector
MultibodyFrictionConeDataTpl< Scalar > Data
StageFunctionDataTpl(const int ndx, const int nu, const int nr)
StageFunctionDataTpl< Scalar > Data
StageFunctionTpl(const int ndx, const int nu, const int nr)
Typedefs for math (Eigen vectors, matrices) depending on scalar type.
Definition math.hpp:100