aligator  0.14.0
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
contact-force.hpp
Go to the documentation of this file.
1
3#pragma once
4
5#include "./fwd.hpp"
7
8#include <Eigen/src/Core/util/Constants.h>
10#include <pinocchio/algorithm/proximal.hpp>
11
12namespace aligator {
13
14template <typename Scalar> struct ContactForceDataTpl;
15
19template <typename _Scalar>
21public:
22 using Scalar = _Scalar;
25 using BaseData = typename Base::Data;
26 using Model = pinocchio::ModelTpl<Scalar>;
27 using SE3 = pinocchio::SE3Tpl<Scalar>;
29 using RigidConstraintModel = pinocchio::RigidConstraintModelTpl<Scalar>;
31 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(RigidConstraintModel);
32 using ProxSettings = pinocchio::ProximalSettingsTpl<Scalar>;
33 using Vector3or6 = Eigen::Matrix<Scalar, -1, 1, Eigen::ColMajor, 6, 1>;
34
42
43 ContactForceResidualTpl(const int ndx, const Model &model,
44 const MatrixXs &actuation,
45 const RigidConstraintModelVector &constraint_models,
46 const ProxSettings &prox_settings,
47 const Vector3or6 &fref,
48 const std::string &contact_name)
49 : Base(ndx, (int)actuation.cols(), (int)fref.size())
50 , pin_model_(model)
51 , actuation_matrix_(actuation)
52 , constraint_models_(constraint_models)
53 , prox_settings_(prox_settings)
54 , fref_(fref)
55 , force_size_(fref.size()) {
56 if (model.nv != actuation.rows()) {
57 ALIGATOR_DOMAIN_ERROR(
58 fmt::format("actuation matrix should have number of rows = pinocchio "
59 "model nv ({} and {}).",
60 actuation.rows(), model.nv));
61 }
62 contact_id_ = -1;
63 for (std::size_t i = 0; i < constraint_models.size(); i++) {
64 if (constraint_models[i].name == contact_name) {
65 contact_id_ = (int)i;
66 }
67 }
68 if (contact_id_ == -1) {
70 "Contact name is not included in constraint models");
71 }
72 }
73
74 const Vector3or6 &getReference() const { return fref_; }
75 void setReference(const Eigen::Ref<const Vector3or6> &fnew) { fref_ = fnew; }
76
77 void evaluate(const ConstVectorRef &x, const ConstVectorRef &u,
78 BaseData &data) const;
79
80 void computeJacobians(const ConstVectorRef &, const ConstVectorRef &,
81 BaseData &data) const;
82
83 shared_ptr<BaseData> createData() const {
84 return std::make_shared<Data>(this);
85 }
86};
87
88template <typename Scalar>
90 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
92 using PinData = pinocchio::DataTpl<Scalar>;
95 using RigidConstraintData = pinocchio::RigidConstraintDataTpl<Scalar>;
96
100
101 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(RigidConstraintData)
103 pinocchio::ProximalSettingsTpl<Scalar> settings;
104
106};
107
108} // namespace aligator
109
110#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
111#include "aligator/modelling/multibody/contact-force.txx"
112#endif
#define ALIGATOR_RUNTIME_ERROR(...)
Definition exceptions.hpp:7
Base definitions for ternary functions.
Main package namespace.
StageFunctionDataTpl< Scalar > Base
pinocchio::DataTpl< Scalar > PinData
pinocchio::ProximalSettingsTpl< Scalar > settings
PinData pin_data_
Pinocchio data object.
typename math_types< Scalar >::VectorXs VectorXs
typename math_types< Scalar >::MatrixXs MatrixXs
ContactForceDataTpl(const ContactForceResidualTpl< Scalar > *model)
pinocchio::RigidConstraintDataTpl< Scalar > RigidConstraintData
This residual returns the derivative of centroidal momentum for a kinodynamics model.
pinocchio::ProximalSettingsTpl< Scalar > ProxSettings
StageFunctionTpl< Scalar > Base
pinocchio::SE3Tpl< Scalar > SE3
ContactForceResidualTpl(const int ndx, const Model &model, const MatrixXs &actuation, const RigidConstraintModelVector &constraint_models, const ProxSettings &prox_settings, const Vector3or6 &fref, const std::string &contact_name)
void evaluate(const ConstVectorRef &x, const ConstVectorRef &u, BaseData &data) const
RigidConstraintModelVector constraint_models_
ContactForceDataTpl< Scalar > Data
void computeJacobians(const ConstVectorRef &, const ConstVectorRef &, BaseData &data) const
void setReference(const Eigen::Ref< const Vector3or6 > &fnew)
const Vector3or6 & getReference() const
PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(RigidConstraintModel) RigidConstraintModelVector
shared_ptr< BaseData > createData() const
Instantiate a Data object.
pinocchio::RigidConstraintModelTpl< Scalar > RigidConstraintModel
Eigen::Matrix< Scalar, -1, 1, Eigen::ColMajor, 6, 1 > Vector3or6
pinocchio::ModelTpl< Scalar > Model
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