aligator 0.19.0
A versatile and efficient C++ library for real-time constrained trajectory optimization.
Loading...
Searching...
No Matches
multibody-wrench-cone.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "./fwd.hpp"
5
6#include <pinocchio/multibody/model.hpp>
7
8#include <pinocchio/algorithm/proximal.hpp>
9#include <pinocchio/algorithm/contact-info.hpp>
10
11namespace aligator {
12
13template <typename Scalar> struct MultibodyWrenchConeDataTpl;
14
19
20template <typename _Scalar>
22public:
23 using Scalar = _Scalar;
26 using BaseData = typename Base::Data;
27 using Model = pinocchio::ModelTpl<Scalar>;
28 using SE3 = pinocchio::SE3Tpl<Scalar>;
30 using RigidConstraintModel = pinocchio::RigidConstraintModelTpl<Scalar>;
31 using RigidConstraintData = pinocchio::RigidConstraintDataTpl<Scalar>;
33 PINOCCHIO_ALIGNED_STD_VECTOR(RigidConstraintModel);
35 PINOCCHIO_ALIGNED_STD_VECTOR(RigidConstraintData);
36 using ProxSettings = pinocchio::ProximalSettingsTpl<Scalar>;
37
42 double mu_;
43 double hL_;
44 double hW_;
46
47 Eigen::Matrix<Scalar, 17, 6> Acone_;
48
50 const int ndx, const Model &model, const MatrixXs &actuation,
51 const RigidConstraintModelVector &constraint_models,
52 const ProxSettings &prox_settings, std::string_view contact_name,
53 const double mu, const double half_length, const double half_width)
54 : Base(ndx, (int)actuation.cols(), 17)
55 , pin_model_(model)
56 , actuation_matrix_(actuation)
57 , constraint_models_(constraint_models)
58 , prox_settings_(prox_settings)
59 , mu_(mu)
60 , hL_(half_length)
61 , hW_(half_width) {
62 if (model.nv != actuation.rows()) {
63 ALIGATOR_DOMAIN_ERROR("Actuation matrix should have number of rows = "
64 "model.nv ({:d} and {:d}).",
65 actuation.rows(), model.nv);
66 }
67 contact_id_ = -1;
68 for (std::size_t i = 0; i < constraint_models.size(); i++) {
69 if (constraint_models[i].name == contact_name) {
70 contact_id_ = (int)i;
71 }
72 }
73 if (contact_id_ == -1) {
75 "Contact name is not included in constraint models");
76 }
77 Acone_ << 0, 0, -1, 0, 0, 0, -1, 0, -mu_, 0, 0, 0, 1, 0, -mu_, 0, 0, 0, 0,
78 -1, -mu_, 0, 0, 0, 0, 1, -mu_, 0, 0, 0, 0, 0, -hW_, -1, 0, 0, 0, 0,
79 -hW_, 1, 0, 0, 0, 0, -hL_, 0, -1, 0, 0, 0, -hL_, 0, 1, 0, -hW_, -hL_,
80 -(hL_ + hW_) * mu_, mu_, mu_, -1, -hW_, hL_, -(hL_ + hW_) * mu_, mu_,
81 -mu_, -1, hW_, -hL_, -(hL_ + hW_) * mu_, -mu_, mu_, -1, hW_, hL_,
82 -(hL_ + hW_) * mu_, -mu_, -mu_, -1, hW_, hL_, -(hL_ + hW_) * mu_, mu_,
83 mu_, 1, hW_, -hL_, -(hL_ + hW_) * mu_, mu_, -mu_, 1, -hW_, hL_,
84 -(hL_ + hW_) * mu_, -mu_, mu_, 1, -hW_, -hL_, -(hL_ + hW_) * mu_, -mu_,
85 -mu_, 1;
86 }
87
88 void evaluate(const ConstVectorRef &x, const ConstVectorRef &u,
89 BaseData &data) const;
90
91 void computeJacobians(const ConstVectorRef &, const ConstVectorRef &,
92 BaseData &data) const;
93
94 shared_ptr<BaseData> createData() const {
95 return std::make_shared<Data>(this);
96 }
97};
98
99template <typename Scalar>
101 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
103 using PinData = pinocchio::DataTpl<Scalar>;
107 using RigidConstraintData = pinocchio::RigidConstraintDataTpl<Scalar>;
109 PINOCCHIO_ALIGNED_STD_VECTOR(RigidConstraintData);
110
115
117 pinocchio::ProximalSettingsTpl<Scalar> settings;
118
121};
122
123#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
126#endif
127} // namespace aligator
#define ALIGATOR_RUNTIME_ERROR(...)
Definition exceptions.hpp:7
Base definitions for ternary functions.
Main package namespace.
typename math_types< Scalar >::MatrixXs MatrixXs
typename math_types< Scalar >::VectorXs VectorXs
MultibodyWrenchConeDataTpl(const MultibodyWrenchConeResidualTpl< Scalar > *model)
pinocchio::ProximalSettingsTpl< Scalar > settings
PINOCCHIO_ALIGNED_STD_VECTOR(RigidConstraintData) RigidConstraintDataVector
pinocchio::RigidConstraintDataTpl< Scalar > RigidConstraintData
typename math_types< Scalar >::Matrix6Xs Matrix6Xs
This residual returns the derivative of centroidal momentum for a kinodynamics model.
MultibodyWrenchConeResidualTpl(const int ndx, const Model &model, const MatrixXs &actuation, const RigidConstraintModelVector &constraint_models, const ProxSettings &prox_settings, std::string_view contact_name, const double mu, const double half_length, const double half_width)
pinocchio::RigidConstraintModelTpl< Scalar > RigidConstraintModel
PINOCCHIO_ALIGNED_STD_VECTOR(RigidConstraintModel) RigidConstraintModelVector
shared_ptr< BaseData > createData() const
Instantiate a Data object.
void evaluate(const ConstVectorRef &x, const ConstVectorRef &u, BaseData &data) const
MultibodyWrenchConeDataTpl< Scalar > Data
pinocchio::ProximalSettingsTpl< Scalar > ProxSettings
void computeJacobians(const ConstVectorRef &, const ConstVectorRef &, BaseData &data) const
pinocchio::RigidConstraintDataTpl< Scalar > RigidConstraintData
PINOCCHIO_ALIGNED_STD_VECTOR(RigidConstraintData) RigidConstraintDataVector
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:123