aligator  0.6.1
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#pragma once
2
3#include "./fwd.hpp"
5
6#include <pinocchio/multibody/model.hpp>
7#include <proxsuite-nlp/modelling/spaces/multibody.hpp>
8#include <pinocchio/multibody/data.hpp>
9
10#ifdef ALIGATOR_PINOCCHIO_V3
11#include <pinocchio/algorithm/proximal.hpp>
12
13namespace aligator {
14
15template <typename Scalar> struct ContactForceDataTpl;
16
22template <typename _Scalar>
23struct ContactForceResidualTpl : StageFunctionTpl<_Scalar>, frame_api {
24public:
25 using Scalar = _Scalar;
27 using Base = StageFunctionTpl<Scalar>;
28 using BaseData = typename Base::Data;
29 using Model = pinocchio::ModelTpl<Scalar>;
30 using SE3 = pinocchio::SE3Tpl<Scalar>;
31 using Data = ContactForceDataTpl<Scalar>;
32 using RigidConstraintModelVector = PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(
33 pinocchio::RigidConstraintModel);
34 using RigidConstraintDataVector =
35 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(pinocchio::RigidConstraintData);
36 using ProxSettings = pinocchio::ProximalSettingsTpl<Scalar>;
37
38 Model pin_model_;
39 MatrixXs actuation_matrix_;
40 RigidConstraintModelVector constraint_models_;
41 ProxSettings prox_settings_;
42 Vector6s fref_;
43 int contact_id_;
44
45 ContactForceResidualTpl(const int ndx, const Model &model,
46 const MatrixXs &actuation,
47 const RigidConstraintModelVector &constraint_models,
48 const ProxSettings &prox_settings,
49 const Vector6s &fref, const int contact_id)
50 : Base(ndx, (int)actuation.cols(), 6), pin_model_(model),
51 actuation_matrix_(actuation), constraint_models_(constraint_models),
52 prox_settings_(prox_settings), fref_(fref), contact_id_(contact_id) {
53 if (model.nv != actuation.rows()) {
55 fmt::format("actuation matrix should have number of rows = pinocchio "
56 "model nv ({} and {}).",
57 actuation.rows(), model.nv));
58 }
59 }
60
61 const Vector6s &getReference() const { return fref_; }
62 void setReference(const Eigen::Ref<const Vector6s> &fnew) { fref_ = fnew; }
63
64 void evaluate(const ConstVectorRef &x, const ConstVectorRef &u,
65 const ConstVectorRef &, BaseData &data) const;
66
67 void computeJacobians(const ConstVectorRef &, const ConstVectorRef &,
68 const ConstVectorRef &, BaseData &data) const;
69
70 shared_ptr<BaseData> createData() const {
71 return allocate_shared_eigen_aligned<Data>(this);
72 }
73};
74
75template <typename Scalar>
76struct ContactForceDataTpl : StageFunctionDataTpl<Scalar> {
77 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
78 using Base = StageFunctionDataTpl<Scalar>;
79 using PinData = pinocchio::DataTpl<Scalar>;
80 using VectorXs = typename math_types<Scalar>::VectorXs;
81 using MatrixXs = typename math_types<Scalar>::MatrixXs;
82 using RigidConstraintDataVector =
83 PINOCCHIO_STD_VECTOR_WITH_EIGEN_ALLOCATOR(pinocchio::RigidConstraintData);
84
86 PinData pin_data_;
87 VectorXs tau_;
88
89 RigidConstraintDataVector constraint_datas_;
90 pinocchio::ProximalSettingsTpl<Scalar> settings;
91
92 ContactForceDataTpl(const ContactForceResidualTpl<Scalar> *model);
93};
94
95} // namespace aligator
96
97#include "aligator/modelling/multibody/contact-force.hxx"
98
99#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
100#include "./contact-force.txx"
101#endif
102
103#endif // ALIGATOR_PINOCCHIO_V3
#define ALIGATOR_DOMAIN_ERROR(msg)
Base definitions for ternary functions.
#define ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
Definition math.hpp:18
pinocchio::DataTpl< Scalar, Options > PinData
Definition context.hpp:10
Main package namespace.